首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >有没有一个在Android中使用TouchDelegate来增加视图点击目标大小的例子?

有没有一个在Android中使用TouchDelegate来增加视图点击目标大小的例子?
EN

Stack Overflow用户
提问于 2009-08-27 19:13:09
回答 9查看 45.6K关注 0票数 88

我的理解是,当你有一个太小而不容易触摸的视图时,你应该使用TouchDelegate来增加该视图的可点击区域。

然而,在谷歌上搜索用法示例,会出现多个人问这个问题,但答案很少。

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

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2009-08-27 21:21:54

我问了一个在谷歌工作的朋友,他们能帮我弄清楚如何使用TouchDelegate。这是我们想出来的:

代码语言:javascript
复制
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));
    }
});
票数 107
EN

Stack Overflow用户

发布于 2013-03-04 11:01:13

我能够通过在一个屏幕上使用多个视图(复选框)来实现这一点,这很大程度上来自于this blog post。基本上,您采用emmby的解决方案,并将其应用于每个按钮及其父按钮。

代码语言:javascript
复制
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));
        }
   });
}

在我的例子中,我有一个覆盖在顶部的复选框的图像视图的网格视图,并按如下方式调用该方法:

代码语言:javascript
复制
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);

对我来说效果很好。

票数 21
EN

Stack Overflow用户

发布于 2012-11-07 21:33:40

此解决方案由@BrendanWeinstein在评论中发布。

您可以重写ViewgetHitRect(Rect)方法,而不是发送TouchDelegate (如果您正在扩展一个方法)。

代码语言:javascript
复制
public class MyView extends View {  //NOTE: any other View can be used here

    /* a lot of required methods */

    @Override
    public void getHitRect(Rect r) {
        super.getHitRect(r); //get hit Rect of current View

        if(r == null) {
            return;
        }

        /* Manipulate with rect as you wish */
        r.top -= 10;
    }
}
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1343222

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档