Android TouchDelegate 扩大点击区域_使用touchdelegate扩大控件的点击范围-程序员宅基地

技术标签: Android  

用于更改View的触摸区域,在平常开发中遇到一个问题就是因为图标太小导致老是点击不中,用户体验不太好,TouchDelegate可以改变可点击区域的大小。
Layout如下

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="demo.cn.com.demo.SecondActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:orientation="horizontal"
        android:id="@+id/parent"
        android:weightSum="2">

        <Button
            android:id="@+id/btn1"
            android:layout_width="0dp"
            android:layout_height="50dp"
            android:layout_weight="1"
            android:text="Hello World !" />

        <Button
            android:id="@+id/btn2"
            android:layout_width="0dp"
            android:layout_height="50dp"
            android:layout_weight="1"
            android:text="Hello World !" />

    </LinearLayout>

</RelativeLayout>

java code如下

package demo.cn.com.demo;

import android.graphics.Rect;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.TouchDelegate;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;

public class SecondActivity extends AppCompatActivity {
    

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second2);
        final LinearLayout parent = (LinearLayout) findViewById(R.id.parent);
        final Button btn1 = (Button) findViewById(R.id.btn1);
        Button btn2 = (Button) findViewById(R.id.btn2);

        parent.post(new Runnable() {
            @Override
            public void run() {
                Rect rect = new Rect();
                btn1.getHitRect(rect);
                rect.top -= 100;
                rect.left -= 100;
                rect.bottom += 100;
                rect.right += 100;
                TouchDelegate touchDelegate = new TouchDelegate(rect,btn1);
                ((View)btn1.getParent()).setTouchDelegate(touchDelegate);
            }
        });
    }
}

此时btn1能够点击的区域就是下面的红线框区域
这里写图片描述

采用此方法需要注意:
1、若View的自定义触摸范围超出Parent的大小,则超出的那部分无效。
2、一个Parent只能设置一个View的TouchDelegate,设置多个时只有最后设置的生效。
3、如果点击区域延伸到了兄弟控件,那么还是兄弟控件响应。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/csm_qz/article/details/50880847

智能推荐

class mate_class meta:-程序员宅基地

文章浏览阅读1.8k次。class mate_class meta:

冲销凭证BAPI_ACC_DOCUMENT_REV_POST封装FUNCTION_abap bapi_acc_document_rev_post-程序员宅基地

文章浏览阅读1.8k次。FM: ZF_FI_ACC_DOC_REV_POSTFUNCTION ZF_FI_ACC_DOC_REV_POST.*"----------------------------------------------------------------------*"*"本地接口:*" IMPORTING*" REFERENCE(IV_BUKRS) TYPE BKPF-BUK..._abap bapi_acc_document_rev_post

java防注入代码_JAVA中防止SQL注入攻击类的源代码-程序员宅基地

文章浏览阅读301次。JAVA-字符串过滤类package cn.com.hbivt.util;/*** Title: ** Description: ** Copyright: Copyright (c) 2005** Company: ** @author not attributable* @version 1.0*/public class StringUtils {//过滤通过页面表单提交的字符private..._java防止命令注入代码

Java框架中的基础知识_java学到框架需要了解什么知识-程序员宅基地

文章浏览阅读825次。Java中的框架基础面试知识(一)spring mvc 工作机制(原理):DispatcherServlet主要用作职责调度工作,本身主要用于控制流程Spring mvc运行原理  1.springmvc将所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责对请求进行真正的处理工作。  2.DispatcherServlet查询一个或多个HandlerMapping..._java学到框架需要了解什么知识

Vue2 - Vue2项目中使用 ElementUI 的 el-select 实现下拉框多选功能_el-select 选择一个后,右边弹出下级目录-程序员宅基地

文章浏览阅读436次。Vue2项目中使用 ElementUI 的 el-select 实现下拉框多选功能_el-select 选择一个后,右边弹出下级目录

C#上位机调试经验_c#上位机怎么调试-程序员宅基地

文章浏览阅读518次,点赞4次,收藏2次。C#上位机调试经验_c#上位机怎么调试

随便推点

币须知道 |日本计划更改加密货币累进税为统一税率,土耳其拥有加密货币比例位居欧洲国家之首...-程序员宅基地

文章浏览阅读421次。您的转发和吐槽是我们前进的动力今日要闻 监管要闻·俄罗斯军方将利用区块链技术追踪黑客攻击的来源·日本计划更改加密货币累进税为统一税率·四川省委全体会议决定积极探索区块链发..._波洛莱物流 阿里巴巴

Linux内核网络结构,和收发数据基本流程_linux 内核 网络收发包函数-程序员宅基地

文章浏览阅读908次。不管是大型虚拟化云网络,还是嵌入式物联网系统,Linux网络都扮演着重要的角色。借用一句话说,如果说网络是信息系统的基石,那么Linux网络系统就是基石中的钢筋。它经过几十年的发展,它千锤百炼,几乎包含了市面上所有的网络通讯功能,要想一下子把学透是不容易的,只能顺着代码脉络看着前辈们写的文章,边分析边总结吧。先来看一下整体结构:Linux网络基本结构我把它分成几个层次,每个层次只是一个逻辑上的概念,并没有严格的定义,只是为了理解上的方便,而且很多模块的代码都是交织混用的,要统一来划分也不容易的。况且,通讯技_linux 内核 网络收发包函数

树莓派安装一些常用的软件VSCode,浏览器,输入法,QQ,截图工具,性能查看器_树莓派安装软件-程序员宅基地

文章浏览阅读2.7k次。树莓派常用的工具,截图工具,性能查看器,vscode等_树莓派安装软件

arduino两个个开关控制多个灯程序_Arduino 第二个程序LED灯闪烁-程序员宅基地

文章浏览阅读1.1k次。Arduino 也是是接触了下,程序挺简单的,与C语言类似。LED 小灯实验是比较基础的实验之一,上一个“Hello World!”实验里已经利用到了Arduino 自带的LED,这次我们利用其他I/O 口和外接直插LED 灯来完成这个实验,我们需要的实验 器材除了每个实验都必须的Arduino 控制器和USB 下载线以外的 其它器件如下: 红色M5 直插LED*1 220Ω直插电阻*1 面包板*..._arduino和面包板接多个灯

Raki的读paper小记:GQA: Training Generalized Multi-Query Transformer Models from Multi-Head Checkpoints_gqa:谷歌提出分组查询注意力-程序员宅基地

文章浏览阅读525次。图2展示了分组查询注意力和多头/多查询注意力的比较。适中数量的组导致插值模型的质量高于MQA,但比MHA更快,正如我们将展示的那样,这代表了一个有利的权衡。然而,更大的模型通常会按比例增加头的数量,使得多查询注意力在内存带宽和容量上都表现出更激进的削减。此外,较大的模型受到注意力的内存带宽开销相对较小,因为键值缓存随着模型维度的增加而增加,而模型的FLOPs和参数随模型维度的。此外,我们引入分组查询注意力,它是多查询注意力和多头注意力的插值,既能够在与多查询注意力相当的速度下实现接近多头注意力的质量。_gqa:谷歌提出分组查询注意力

Notepad++配置C语言编译环境-程序员宅基地

文章浏览阅读4k次,点赞5次,收藏12次。今天和大家分享一个使用Notepad++配置C语言编译环境的方法,因为本人是一个C语言新手,一般写个小程序用文本编辑器就够用。前提: 下载mingw 或者 Cygwin 或 tdm-gcc 里面有C语言编译器,然后配置环境变量。 https://sourceforge.net/projects/mingw-w64/files/?source=navbar首先: ...

推荐文章

热门文章

相关标签