ええと、ViewPager
と他のスクロールアイテムは、デフォルトではうまく一緒に再生されません。私がこのようなことをしなければならないときは、普通はViewPager
をサブクラス化して、スクロールできる子を認識しているものを作ります。次に私のonInterceptTouchEvent()
では、ヒットした矩形がその子の中にあるかどうかをチェックし、タッチイベントを傍受しないようにして、子供がそれに打撃を与えるようにします。このような何か:
/**
* Override to not intercept touch events within our scroller if it exists.
*/
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
if(scrollerId != 0) {
View scroller = findViewById(scrollerId);
if(scroller != null) {
Rect rect = new Rect();
scroller.getHitRect(rect);
if(rect.contains((int)ev.getX(), (int)ev.getY())) {
return false;
}
}
}
return super.onInterceptTouchEvent(ev);
}
は、その後、あなたが必要とするすべては(簡単なパブリックメソッドが動作します)そのscrollerId
を設定する方法です。あなたはViewPager
子供とScrollView
垂直ためのスクロール要素を使用している場合
注別の方法があり、あなたは別の方向に行く必要があります。 ViewPager
がそれをピックアップするように、垂直スクロールの方向と水平スクロールのベールを検出するサブクラスScrollView
があります。
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
xDistance = yDistance = 0f;
lastX = ev.getX();
lastY = ev.getY();
break;
case MotionEvent.ACTION_MOVE:
final float curX = ev.getX();
final float curY = ev.getY();
xDistance += Math.abs(curX - lastX);
yDistance += Math.abs(curY - lastY);
lastX = curX;
lastY = curY;
if (xDistance > yDistance)
return false;
}
return super.onInterceptTouchEvent(ev);
}
がいること...それがはるかにその原料を理解していなかった... MotionEventsまでに来るだろうが、多分サンプルコードは今 –
うん、それを試してみて、私はちょうどつもりだ...私はそこに得るのを助ける考え出し働くしかし、今私はこれを理解し始めているので、私はViewPager内の画像をクリック可能にし、活動を開始する必要があるので、すぐに別の問題が生じるだろうと思います。それについてのヒントです....私はACTION_MOVEを捕まえ、ACTION_DOWNをあなたの2番目の例に似せるようにすべきだと思います。 –
いいえ、あまり問題にならないはずです。あなたの 'onClickListener'を' ImageView'に設定して、それらをクリック可能(XMLレイアウトやコードのいずれか)として設定してください。あなたは大丈夫です。クリックアクションは、移動イベントとは少し異なるパスです。 –