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

  • Chriselle Lim

    Chriselle Li

    26 Ocak 2008
  • ExcelIsFun

    ExcelIsFun

    16 ŞUBAT 2008
  • Fubar Protocol

    Fubar Protoc

    21 AĞUSTOS 2010