0

Edit: This problem was down to me passing the wrong view to the Touch Delegate...problem is resolved now....

My RelativeLayout extension enlarges the clickable area of an ImageView. The RelativeLayout is the root View of the ListView row. The problem is when tapping areas that should be delegated to the ImageView, the ListView's onItemClicked is triggered.

My code is at the end and below is an image of what the extended bounds of the ImageView should be. If I tap on blue areas that are not the image, the click is received by the ListView.

Blue areas indicate new bounds of the ImageView

public class DelegatingRelativeLayout extends RelativeLayout {

//relevant code moved to top
@Override 
protected void onLayout(boolean changed, int l, int t, int r, int b) {
    super.onLayout(changed, l, t, r, b);

    final float density = getContext().getResources().getDisplayMetrics().density;
    int extra = (int) (density * 4 + 0.5f);

    Rect rect = new Rect(0, 0, mEnlargedView.getWidth(), getHeight());
    rect.right += extra; //extend bounds by 4 pixels
    setTouchDelegate(new TouchDelegate(rect, mEnlargedView));
    mExtendedBounds = rect;
}

public void setEnlargedView(View v) {       
    mEnlargedView = v;
}

private static final boolean DEBUG_DRAW = true;

private View mEnlargedView;
private Rect mExtendedBounds;

//constructors removed

@Override
protected void dispatchDraw(Canvas canvas) {

    if (DEBUG_DRAW) {
        Paint p = new Paint();
        p.setColor(Color.BLUE);
        canvas.drawRect(mExtendedBounds, p);
    }

    super.dispatchDraw(canvas);
}

}
4

1 回答 1

0

呃,我刚刚意识到我一直在将错误的视图传递给触摸代表>。<现在工作正常......>。<

于 2012-06-21T00:44:35.817 回答