Kaydırma pozisyonları senkronize ScrollView - android
Benim android düzeni 2 ScrollViews var. Nasıl kaydırma konumlarını senkronize edebilir miyim?
CEVAP
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.
ScrollView içinde liste görünümü Andro...
Bir ScrollView Program aracılığıyla An...
Android: ScrollView durur kaydırma sır...
Android ScrollView gelen kaydırma çubu...
Android - HorizontalScrollView ScrollV...