0

私は子供として拡張された(github)FrameLayoutを持っています。-Eventを設定すると、トリガーされません。その理由は、メソッドの戻り値にあるようです。ImageViewonClick()FrameLayoutonTouch()

ACTION_DOWNの戻り値をfalseに設定すると、イベントは適切に渡されますが、マルチタッチ機能が機能しなくなります。またperformClick()、ACTION_UPイベントで実行しても意味がありません。

それらのイベントを正しく処理する方法は?

4

2 に答える 2

1

現在、クリックイベントをビューの親に手動で渡すことで問題を解決しました。

new GestureDetector( context, new GestureDetector.SimpleOnGestureListener()
{
    @Override
    public boolean onSingleTapConfirmed( MotionEvent event )
    {
        View view = MultitouchImageView.this;

        if( !performClick() )
        {
            while( view.getParent() instanceof View )
            {
                view = (View) view.getParent();

                if( view.performClick() )
                {
                    return true;
                }
            }

            return false;
        }

        return true;
    }

    ... 
}

発生するLongPressイベントに対して同じことを行います。それは私がそれを必要とするように機能しますが、私は解決策が好きではありません。

于 2012-10-24T10:40:24.433 に答える
1

ImageViewの子の前にタッチを受け取るように、親のFrameLayoutを設定してみてください。あなたは追加することによってこれを行うことができます

android:descendantFocusability="beforeDescendants"

親のxmlに。

例えば

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:descendantFocusability="beforeDescendants">
    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</FrameLayout>
于 2016-03-10T13:55:08.147 に答える