0

私はこのようなレイアウトを持っています -

     <RelativeLayout   
        android:id="@+id/relativeLayoutTable"   
        android:layout_height="fill_parent"     
        android:layout_width="fill_parent"       
        android:layout_below="@+id/relativeLayout215"
        android:layout_toRightOf="@+id/relativeLayout20" >

            <ScrollView 
                android:id="@+id/scrollView" 
                android:layout_height="fill_parent"     
                android:layout_width="fill_parent"         
                android:scrollbars="horizontal|vertical" 
                android:fillViewport="true"
                android:scrollbarStyle="insideOverlay"> 

                <HorizontalScrollView
                    android:id="@+id/horizontalScrollView1"  
                    android:layout_width="wrap_content"  
                    android:layout_height="wrap_content"
                    android:scrollbarStyle="insideOverlay" >

                    <TableLayout
                        android:id="@+id/tableLayout1"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:gravity="center" />
                </HorizontalScrollView>
        </ScrollView>
    </RelativeLayout>

テーブルレイアウトは、プログラムで作成されたセル/ビューで構成されています。各セル/ビューに対して onClicklistener を定義しました。ここで、scrollView の onTouchlistener も定義しました。セル/ビューのクリック イベントは取得できますが、scrollView で ACTION_POINTER_DOWN イベントを取得できません。助けてください。ありがとう。

4

1 に答える 1

0

onClicklistener を削除したら、ドラッグ/onTouchlistener テーブル レイアウトは問題ありません。コードを試すことができます。うまくいきます:</p>

    @Override
public boolean onInterceptTouchEvent(MotionEvent event) {
    boolean intercept = false;
    switch (event.getAction()  & MotionEvent.ACTION_MASK ) {
        case MotionEvent.ACTION_DOWN: {
            currentX = (int) event.getRawX();
            currentY = (int) event.getRawY();
            break;
        }
        case MotionEvent.ACTION_MOVE: {
            int x2 = Math.abs(currentX - (int) event.getRawX());
            int y2 = Math.abs(currentY - (int) event.getRawY());
            if (x2 > touchSlop || y2 > touchSlop) {
                intercept = true;
            }
            break;
        }
        case MotionEvent.ACTION_POINTER_DOWN: {//it's important
            oldDist = spacing(event);
            mode = ZOOM;
            intercept = true;
            break;
        }
    }
    return intercept;
}
于 2013-05-07T01:19:20.837 に答える