2

私はAndroidアプリケーションに取り組んでいます。私のアプリでは、下位バージョンを含む上から下へのスライド バーを表示する必要があります。そのため、カスタマイズされたスライド ドロワーを作成しました。正常に動作します。今、スライド式の引き出しにボタンを追加したいと思います。今、私はボタンをクリックできませんでした。クリックできない理由がわかりました。次のオーバーライドされたメソッドを見てください。

public boolean onInterceptTouchEvent( MotionEvent event )
{
    if ( mLocked ) { return false; }

    final int action = event.getAction();

    float x = event.getX();
    float y = event.getY();

    final Rect frame = mFrame;
    final View handle = mHandle;

    handle.getHitRect( frame );
    if ( !mTracking && !frame.contains( (int)x, (int)y ) ) { return false; }

    if ( action == MotionEvent.ACTION_DOWN ) {
        mTracking = true;

        handle.setPressed( true );
        // Must be called before prepareTracking()
        prepareContent();

        // Must be called after prepareContent()
        if ( mOnDrawerScrollListener != null ) {
            mOnDrawerScrollListener.onScrollStarted();
        }

        if ( mVertical ) {
            final int top = mHandle.getTop();
            mTouchDelta = (int)y - top;
            prepareTracking( top );
        } else {
            final int left = mHandle.getLeft();
            mTouchDelta = (int)x - left;
            prepareTracking( left );
        }
        mVelocityTracker.addMovement( event );
    }
            return true;

}

次のコードを onInterceptTouchEvent に追加すると、ボタンのクリックは正常に機能しますが、スライド ドロワーのスライド機能は機能しません。

    if (mHandleLayout != null)
    {
int clickX = (int) (event.getX() - mHandleLayout.getLeft());
     int clickY = (int) (event.getY() - mHandleLayout.getTop());

        if (isAnyClickableChildHit(mHandleLayout, clickX, clickY))
        {
            return false;
        }
        return super.onInterceptTouchEvent(event);
    }

簡単に言えば、trueを返すとスライドは機能しますが、ボタンをクリックしないでください。また、super.onInterceptTouchEvent(event) を返すと、ボタンのクリックは機能しますが、スライド機能は機能しません。

友達を助けてください

4

0 に答える 0