4

次のコードを使用して、ビューのタッチ デリゲートを作成しています。問題は、クリック可能な領域を増やしたいビューが非常に狭い LinearLayout 内にあることです。したがって、以下のコードはビューのクリック可能な領域を増やすことができますが、狭い LinearLayout の範囲内でのみです。この関数に myView の親ではなく祖父母 (myView.getParent().getParent()) を渡したいと思います。これは、より大きなクリック可能な領域のためのスペースを持つ RelativeLayout です。しかし、その後 touchRect は間違った場所を指し、私の TouchDelegate は間違った位置になります..

なぜなら: delegate.getHitRect(touchRect); 祖父母 (または親の親) ではなく、親に対する位置を返します。

public static Runnable getTouchDelegateAction(final View delegate, final View parent, final int topPadding, final int bottomPadding, final int leftPadding,
        final int rightPadding) {
    return new Runnable() {
        @Override
        public void run() {

            // Construct a new Rectangle and let the Delegate set its values
            Rect touchRect = new Rect();
            delegate.getHitRect(touchRect);

            // Modify the dimensions of the Rectangle
            // Padding values below zero are replaced by zeros
            touchRect.top -= Math.max(0, topPadding);
            touchRect.bottom += Math.max(0, bottomPadding);
            touchRect.left -= Math.max(0, leftPadding);
            touchRect.right += Math.max(0, rightPadding);


            // Now we are going to construct the TouchDelegate
            TouchDelegate touchDelegate = new TouchDelegate(touchRect, delegate);

            // And set it on the parent
            parent.setTouchDelegate(touchDelegate);
        }
    };
}

助言がありますか?

4

2 に答える 2