4

RealViewSwitcher を使用してビューをスワイプしても問題ありません。私の問題はこれと似ています。この写真で私のシナリオを少し説明しようと思いますシナリオ

リストビュー <------> 詳細ビュー ------> スワイプ ビュー (水平)。詳細ビューが部分的にしか表示されず、スクロールしようとしても何も起こりません。

詳細レイアウト(縦スクロールなし)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

     <TextView
        android:id="@+id/textView1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:textColorHint="#FF0000"
        android:textSize="12dp"
        android:textStyle="bold"
        android:typeface="sans" />

         <ImageView
            android:id="@+id/imageView1"
            android:layout_width="150dip"
            android:layout_height="120dip"
            android:scaleType="centerCrop"
            android:src="@drawable/stub"/>   
   <TextView
        android:id="@+id/textView2"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:padding="20dip"
        android:textColor="#999999"
        android:textColorLink="#ff0000"
        android:textSize="20dip"
        android:textStyle="normal"
        android:typeface="sans" />
</LinearLayout>

RealViewSwitcher を使用したレイアウト

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="fill_parent"
    android:layout_width="fill_parent"
    android:orientation="vertical">

    <it.application.ppn.lib.RealViewSwitcher
        android:id="@+id/horizontal_pager"
        android:layout_width="fill_parent"
        android:layout_height="0px"
        android:layout_weight="1">

    </it.application.ppn.lib.RealViewSwitcher>

</LinearLayout>
4

1 に答える 1

1

私は同じ問題に直面し、RealViewSwitcher でタッチ イベントをインターセプトすることで解決策を見つけました。

編集:以前に投稿されたバリアントは、新しい API では機能しません。コードの 3 番目のリビジョンがあります。

これらの行を RealViewSwitcher 実装に追加します。

@Override
public boolean onInterceptTouchEvent(MotionEvent event) {

    // prevent vertical scrolling when view switching in progress 
    if (!mScroller.isFinished())
        return true;

    switch (event.getAction()) {
    case MotionEvent.ACTION_DOWN:
        mScrollLocked = false;
        mLastX = event.getX();
        mLastY = event.getY();
        mDeltaX = 0;
        mDeltaY = 0;
        onTouchEvent(event);
        break;

    case MotionEvent.ACTION_MOVE:
        final float x = event.getX();
        final float y = event.getY();
        mDeltaX += Math.abs(x - mLastX);
        mDeltaY += Math.abs(y - mLastY);
        mLastX = x;
        mLastY = y;
        if (mDeltaX > mDeltaY) {
            mScrollLocked = true;
            onTouchEvent(event);
        } else {
            snapToDestination();
        }
        break;
    }

    if (mScrollLocked)
        return true; // prevent furhter processing

    return super.onInterceptTouchEvent(event);
}

EDIT2:次のように、メソッドを編集して本体をonTouchEvent置き換える必要もあります。case MotionEvent.ACTION_DOWN:

    case MotionEvent.ACTION_DOWN:

        /*
         * If being flinged and user touches, stop the fling. isFinished will be false if being flinged.
         */
        mTouchState = mScroller.isFinished() ? TOUCH_STATE_REST : TOUCH_STATE_SCROLLING;

        if (mTouchState == TOUCH_STATE_SCROLLING) {
            mScroller.abortAnimation();
        }

        // Remember where the motion event started
        mLastMotionX = x;

        break;
于 2013-08-08T12:21:27.170 に答える