HorizontalScrollView
がスクロールされたときにイベントをリッスンしようとしています。これを試しましたが、何も印刷されません。
HorizontalScrollView headerScrollView = new HorizontalScrollView(this);
headerScrollView.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
Log.i("hv1",event.toString());
Log.i("hv1","HELLO");
return false;
}
});
実際の問題は、一度に2つのHorizontalScrollView
をスクロールしたいということです。少なくとも一方がスクロールしたときに、両方を同時にスクロールする必要があります。回避策はありますか?
以下の答えを使用して、これを実装しようとしましたが、クラスのメソッドをどのように使用する必要があるのかわかりません。
TestHorizontalScrollView headerScrollView = (TestHorizontalScrollView) findViewById(R.id.headerHv);
これは、レイアウトファイルのhsv要素を指す必要がある方法ですか?
HorizontalScrollViewを拡張する独自のカスタムクラスを作成し、onScrollChanged()関数をそのようにオーバーライドしてみてください。
public class TestHorizontalScrollView extends HorizontalScrollView {
public TestHorizontalScrollView(Context context) {
super(context);
}
@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt) {
// TODO Auto-generated method stub
Log.i("Scrolling", "X from ["+oldl+"] to ["+l+"]");
super.onScrollChanged(l, t, oldl, oldt);
}
}
このオーバーライドされた関数は、ビューがタッチされていない場合でも、スクロール位置へのすべての変更をキャッチします。これにより、スクロールビューの同期が維持されます。
古い質問ですが、多分役に立ちます。あなたはこのようなことをすることができます:
scrollOne = (HorizontalScrollView)findViewById(R.id.horizontal_one);
scrollTwo = (HorizontalScrollView)findViewById(R.id.horizontal_two);
scrollTwo.setOnTouchListener(new OnTouchListener(){
@Override
public boolean onTouch(View view, MotionEvent event) {
// TODO Auto-generated method stub
int scrollX = view.getScrollX();
int scrollY = view.getScrollY();
scrollOne.scrollTo(scrollX, scrollY);
return false;
}
});
リスナー付きScrollView、API <2
以下のコードを記述してください
MyHorizontalScrollView scrollView = (MyHorizontalScrollView)view.findViewById(R.id.scrollViewBrowse);
scrollView.setOnScrollChangedListener(new MyHorizontalScrollView.OnScrollChangedListener() {
@Override
public void onScrollChanged(int l, int t, int oldl, int oldt) {
}
});
MyHorizontalScrollView
public class MyHorizontalScrollView extends ScrollView {
public OnScrollChangedListener mOnScrollChangedListener;
public MyHorizontalScrollView(Context context) {
super(context);
}
public MyHorizontalScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyHorizontalScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt) {
super.onScrollChanged(l, t, oldl, oldt);
if (mOnScrollChangedListener != null) {
mOnScrollChangedListener.onScrollChanged(l, t, oldl, oldt);
}
}
public void setOnScrollChangedListener(OnScrollChangedListener onScrollChangedListener){
this.mOnScrollChangedListener = onScrollChangedListener;
}
public interface OnScrollChangedListener{
void onScrollChanged(int l, int t, int oldl, int oldt);
}
}
* Xmlファイル*
<MyHorizontalScrollView
Android:id="@+id/scrollViewBrowse"
Android:layout_width="match_parent"
Android:layout_height="fill_parent"
Android:background="@drawable/backgroung"
Android:padding="10dp">
</MyHorizontalScrollView>
あなたはこれを試すことができます、私はたくさんの方法を試しましたが、どれも私のニーズを満たしていません、そして私はそれを自分でやろうとしました、そして私は成功しました、そしてそれは良いようです、それはスムーズです。
<LinearLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="wrap_content"
Android:layout_height="match_parent"
Android:orientation="horizontal">
<ScrollView
Android:layout_width="match_parent"
Android:layout_height="match_parent">
<LinearLayout
Android:orientation="horizontal"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content">
<com.szl.fundlistdemo.WrapContentListView
Android:id="@+id/left_lv"
Android:layout_width="100dp"
Android:layout_height="wrap_content"
Android:scrollbars="none"/>
<HorizontalScrollView
Android:id="@+id/hscrollview"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content">
<com.szl.fundlistdemo.WrapContentListView
Android:id="@+id/right_lv"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"/>
</HorizontalScrollView>
</LinearLayout>
</ScrollView>
public class WrapContentListView extends ListView{
public WrapContentListView(Context context) {
super(context);
}
public WrapContentListView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public WrapContentListView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
}
APIレベルの問題を回避するには...これに従ってください。
scrollView.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {
@Override
public void onScrollChanged() {
int scrollY = scrollView.getScrollY();
int scrollX = scrollView.getScrollX();
if (scrollY > 500) {
} else {
}
}
});