SORU
16 EKİM 2010, CUMARTESİ


Kaydırma pozisyonları senkronize ScrollView - android

Benim android düzeni 2 ScrollViews var. Nasıl kaydırma konumlarını senkronize edebilir miyim?

CEVAP
17 EKİM 2010, Pazar


ScrollView bir yöntem daha var

protected void onScrollChanged(int x, int y, int oldx, int oldy)

Google korudu yaptılar ve pek de mantıklı gelmedi. bu yüzden erişmek için ihtiyacımız olacağını hiç düşünmemiştim ne yazık ki bir "setOnScrollChangedListener" kanca. Bunu kendimiz için yapmalıyız.

İlk bir arayüze ihtiyacımız var.

package com.test;

public interface ScrollViewListener {

    void onScrollChanged(ObservableScrollView scrollView, int x, int y, int oldx, int oldy);

}

Sonra ScrollView sınıfı geçersiz kılmak için, ScrollViewListener kanca sağlamak için ihtiyacımız var.

package com.test;

import android.content.Context;
import android.util.AttributeSet;
import android.widget.ScrollView;

public class ObservableScrollView extends ScrollView {

    private ScrollViewListener scrollViewListener = null;

    public ObservableScrollView(Context context) {
        super(context);
    }

    public ObservableScrollView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    public ObservableScrollView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public void setScrollViewListener(ScrollViewListener scrollViewListener) {
        this.scrollViewListener = scrollViewListener;
    }

    @Override
    protected void onScrollChanged(int x, int y, int oldx, int oldy) {
        super.onScrollChanged(x, y, oldx, oldy);
        if(scrollViewListener != null) {
            scrollViewListener.onScrollChanged(this, x, y, oldx, oldy);
        }
    }

}

Ve mevcut ScrollView etiketleri yerine düzeni bu yeni ObservableScrollView sınıfı belirtmek gerekir.

<com.test.ObservableScrollView
    android:id="@ id/scrollview1"
    ... >

    ...

</com.test.ObservableScrollView>

Son olarak, hep birlikte Düzen sınıfta koyduk.

package com.test;

import android.app.Activity;
import android.os.Bundle;

public class Q3948934 extends Activity implements ScrollViewListener {

    private ObservableScrollView scrollView1 = null;
    private ObservableScrollView scrollView2 = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.q3948934);

        scrollView1 = (ObservableScrollView) findViewById(R.id.scrollview1);
        scrollView1.setScrollViewListener(this);
        scrollView2 = (ObservableScrollView) findViewById(R.id.scrollview2);
        scrollView2.setScrollViewListener(this);
    }

    public void onScrollChanged(ObservableScrollView scrollView, int x, int y, int oldx, int oldy) {
        if(scrollView == scrollView1) {
            scrollView2.scrollTo(x, y);
        } else if(scrollView == scrollView2) {
            scrollView1.scrollTo(x, y);
        }
    }

}

Bu scrollTo() kod bizim için herhangi bir döngü koşulları ilgilenir, bu konuda endişelenmenize gerek yok. Sadece ihtar bu çözüm korunan bir yöntem geçersiz kılma olduğumuz için Android sürümlerini çalışmak için garanti değil.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • AmazonWireless

    AmazonWirele

    8 EYLÜL 2010
  • Chip Johnson

    Chip Johnson

    30 AĞUSTOS 2007
  • TVNorge

    TVNorge

    5 EKİM 2006