有没有一个例子说明如何在Android中使用TouchDelegate来增加视图的单击目标的大小?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (24)

我的理解是,如果您的视图太小而不易触摸,则应该使用TouchDelegate来增加该视图的可点击区域。

但是,在Google上搜索使用示例会引起多人提问,但答案很少。

有没有人知道为视图设置触控代理的正确方法,例如,在每个方向上将其可点击区域增加4个像素?

提问于
用户回答回答于

我问了Google的一位朋友,他们能够帮助我弄清楚如何使用TouchDelegate。以下是我们想到的:

final View parent = (View) delegate.getParent();
parent.post( new Runnable() {
    // Post in the parent's message queue to make sure the parent
    // lays out its children before we call getHitRect()
    public void run() {
        final Rect r = new Rect();
        delegate.getHitRect(r);
        r.top -= 4;
        r.bottom += 4;
        parent.setTouchDelegate( new TouchDelegate( r , delegate));
    }
});
用户回答回答于

基本上你采取emmby的解决方案,并将其应用到每个按钮:

public static void expandTouchArea(final View bigView, final View smallView, final int extraPadding) {
    bigView.post(new Runnable() {
        @Override
        public void run() {
            Rect rect = new Rect();
            smallView.getHitRect(rect);
            rect.top -= extraPadding;
            rect.left -= extraPadding;
            rect.right += extraPadding;
            rect.bottom += extraPadding;
            bigView.setTouchDelegate(new TouchDelegate(rect, smallView));
        }
   });
}

在我的情况下,我有一个GridView的图像浏览器复选框顶部,并调用方法如下:

CheckBox mCheckBox = (CheckBox) convertView.findViewById(R.id.checkBox1);
final ImageView imageView = (ImageView) convertView.findViewById(R.id.imageView1);

// Increase checkbox clickable area
expandTouchArea(imageView, mCheckBox, 100);

扫码关注云+社区