Android 实现不规则形状按钮

【unity游戏开发入门到精通——UGUI】实现精准点击异形或者不规则图片button按钮 异形或者不规则图片按钮是指形状不是传统矩形的按钮。比如我下面的这种图片。那么我们要如何实现精准点击按钮区域呢? 阅读详情

继承Button,通过重写onTouchEvent来达到目的。


package com.test;

import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.Button;



public class IrregularButton extends Button
{
	public interface TouchChecker
	{
		boolean isInTouchArea(int x, int y, int width, int height);
	}
	
	
	private TouchChecker touchChecker;
	
	public IrregularButton(Context context)
	{
		super(context);
		
		init();
	}
	public IrregularButton(Context context, AttributeSet attrs)
	{
		super(context, attrs);
		
		init();
	}
	public IrregularButton(Context context, AttributeSet attrs, int defStyle)
	{
		super(context, attrs, defStyle);
		
		init();
	}

	private void init()
	{
	}
	
	public void setTouchChecker(TouchChecker touchChecker)
	{
		this.touchChecker = touchChecker;
	}
	
	@Override
	public boolean onTouchEvent(MotionEvent event)
	{
		if (touchChecker != null)
		{
			if (event.getAction() == MotionEvent.ACTION_DOWN) 
			{
				if (touchChecker.isInTouchArea((int) event.getX(), (int) event.getY(), getWidth(), getHeight()))
				{
					return super.onTouchEvent(event);
				}
				else
				{
					return false;
				}
			}
		}
		
		return super.onTouchEvent(event);
	}
	
	
}


TouchChecker是一个用来判断点击区域的接口,通过给按钮安装不同的TouchChecker,可以实现各种不同的不规则按钮的点击处理。


下面这个可以根据位图的透明度来判断,完全透明的部分不可以点击,其他位置可以点击

package com.test;

import android.graphics.Bitmap;
import android.util.Log;

import com.test.IrregularButton.TouchChecker;

public class BitmapTouchChecker implements TouchChecker
{
	private Bitmap bitmap;
	
	public BitmapTouchChecker(Bitmap bitmap)
	{
		this.bitmap = bitmap;
	}
	
	@Override
	public boolean isInTouchArea(int x, int y, int width, int height)
	{
		if (bitmap != null)
		{
			int pixel = bitmap.getPixel(x, y);
			
			if (((pixel >> 24) & 0xff) > 0)
			{
				Log.d("BitmapTouchChecker", "isInTouchArea return true");
				
				return true;
			}
		}	
		
		Log.d("BitmapTouchChecker", "isInTouchArea return false");
		
		return false;
	}

}


下面这个是根据矩形范围来判断

package com.test;

import java.util.ArrayList;

import android.graphics.Rect;
import android.util.Log;

import com.test.IrregularButton.TouchChecker;

public class RectTouchChecker implements TouchChecker
{
	private ArrayList<Rect> rectList;
	
	public RectTouchChecker(ArrayList<Rect> rectList)
	{
		this.rectList = rectList;
	}
	
	@Override
	public boolean isInTouchArea(int x, int y, int width, int height)
	{
		if (rectList != null)
		{
			for (Rect rect : rectList)
			{
				if (rect.contains(x, y))
				{
					Log.d("RectTouchChecker", "isInTouchArea return true");
					
					return true;
				}
			}

		}	
		
		Log.d("RectTouchChecker", "isInTouchArea return false");
		
		return false;
	}

}

如果有其他的需求只要实现一个TouchChecker就可以了。

Android-AnomalyButton:Android不规则按钮 Android-AnomalyButton Android不规则按钮 利用判断图片背景像素来判断形状 使用方法如下: <info.smemo.androidanomalybutton.AnomalyButton android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/play" app:bgcolor="@android:color/transparent" android:layout_alignParentTop="true" android:layout_centerHorizont 立即下载

相关推荐

android 不规则的按钮点击

自定义的View实现了不规则的按钮点击,采用selector,重写onTouchEvent,通过颜色值判断

Android 不规则的按钮组合 自定义控件

Android 不规则的下载按钮

qq_23347019的博客 402

android正六边形按钮

android正六边形按钮 SexangleView

不规则布局,不规则按钮点击效果的实现

文章目录1.原理2.代码3.布局4.效果预览1.正常点击效果2.子控件跟随父布局的点击3.无点击效果5.说明与注意事项代码已上传至[Github](https://github.com/ahiwey/AnomalyLayout) 本文参考自Android不规则点击区域详解 做了点击区域的优化 1.原理 通过像素颜色(这里是透明)判断,拦截(不消费)MotionEvent.ACTION_DOWN事件 2.代码 package org.ahiwey.anomalylayout; import android.

Ahiwey的博客 605

Android自定义控件实现不规则区域点击事件

主要为大家详细介绍了Android自定义控件实现不规则区域点击事件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

STM32在六轴机械臂实时控制中的选型与分层架构设计

嵌入式实时控制系统中,微控制器的选型直接决定运动控制精度与系统可靠性。其核心在于匹配确定性中断响应、低延迟外设协同与工业协议栈支持等硬性指标。STM32凭借Cortex-M内核的NVIC调度能力、成熟HAL库及CAN FD/高级定时器等专用外设,在机电一体化场景中成为伺服控制中枢的首选。相比ESP32等通用MCU,STM32在硬实时性、EMC认证生态和工业总线兼容性上具备不可替代优势。本文围绕GTB六轴机械臂项目,详解基于STM32F407的硬件抽象层配置、FreeRTOS任务调度、事件队列解耦及闭环控制数

jupi8的博客 755

Android 不规则按钮

各位朋友首先请移步 http://blog.youkuaiyun.com/windspeaker/article/details/8129269  看看这个效果

parcool的专栏 3338

H3C IPsec over GRE VPN 实验

配置 IPsec over GRE VPN 来连通两端内网

M建的博客 2477

android不规则按钮,Android 实现不规则形状按钮

继承Button,通过重写onTouchEvent来达到目的。package com.test;import android.content.Context;import android.util.AttributeSet;import android.view.MotionEvent;import android.widget.Button;public class IrregularButto...

weixin_42419782的博客 508

【Java完整版 面试必备】Leetcode Top100题目和答案-滑动窗口篇

【Java完整版 面试必备】Leetcode Top100题目和答案-滑动窗口篇

weixin_43298211的博客 2246

D类功放几种常见“爆破音”问题根源与改善措施

在数字D类功放刚上电或功放播放状态切换时,人耳偶尔会听到“嘣”的声音,我们把这个爆破的Pop Noise。数字功放Pop Noise 出现的原因有很多,本文主要分析Pop Noise 出现原因,并提供相应解决方法。

qq_26815321的博客 3592

Android开发之不规则图形按钮响应

这是我在网上找了不少质料后总结下来的简单不规则图形按钮设计方法。如果我们想在安卓开发时设计漂亮的按钮,很可能会用到图片按钮,但是图片按钮响应区域是长方形的,比如下图如果里面的月亮和云彩是用图片按钮制作,我们点击月亮中间空白部分,月亮按钮会响应,但是我们希望只有黄色部分是可以响应的。简单思路:把月亮中间空白部分设置为透明,通过判断点击点颜色是否透明的方法,考虑是否响应。设计思路:在ontouch中可...

qq_41910181的博客 1555

正点原子ATK-LORA-01无线串口代码移植+STM32F103C8T6(标准库)

目录 一、ATK-LORA-01无线串口资料 二、代码移植 1.分析 (1)usart3(也可以是其他的串口)用于接收数据的串口 usart.h (2)time3(也可以是其他的定时器)用于时序的设置 (3)lora.c 三、演示 1.主机(发送方) (1)主机接线 (2)主机代码(发送方) (3)主机实物 插上无线串口通电即可发送​ 2.从机(接收方) (1)从机接线(LORA与主机相同) (2)从机代码(接收方) (3)从机实物 接上TTL和LORA并通电即...

m0_56942354的博客 8968

不规则按钮

实现思路是点击时候去判断该点的像素值,如果是透明的则认为没有点击。代码如下 package com.dway.widget; import android.annotation.SuppressLint; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Color;...

Dway 563

【信息科学与工程学】【物理/化学科学和工程技术】第八篇 光学07

对于光源-探测器距离 ρ, 稳态漫反射率 R(ρ) ≈ (1/(4π)) [ z₀ (μ_eff + 1/r₁) exp(-μ_eff r₁)/r₁² + (z₀ + 2z_b) (μ_eff + 1/r₂) exp(-μ_eff r₂)/r₂² ], 其中 μ_eff = √(3μ_a(μ_a+μ_s’)), z₀=1/μ_s’, z_b 与边界条件有关。通过测量光纤各点的布里渊频移 ν_B(z) 来得到应变/温度分布:Δν_B(z) = C_ν,ε Δε(z) + C_ν,T ΔT(z)。

weixin_49199313的博客 330

基于matlab的CNN物体识别物体分类系统

主要对物体进行识别,搭建一个物体分类系统本次实验选择规模稍大的 CIFAR-10 数据集进行分类识别,对应图像的大小设计 VggNet、ResNet 进行网络训练。在实际操作过程中,受限于数据规模和硬件配置,对于大小放缩、批次参数、训练步数等进行了多次调试,这也对以后的图像分类任务具有较高的参考意义,并通过对 CIFAR-10 数据集进行训练和评测,采用网络修改的方式来得到新的 CNN 结构,适用于对网络进行配置、融合等相关研究。读者可以通过自行设计或选择其他网络、加载其他数据等方式进行实验的延伸。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 2006

android开发中如何定义一个不规则边界的控件

============问题描述============ 我想定义一个不规则的按钮或者新的组件 可以实现像flash那样的 点击如上图的某一省,那个省的图像就凸起显示的效果 。  据我所知,貌似android的控间都是必须指定 height和width的 也就是每个控件都是长方形的,如果我用framelayout去叠放那些省,然后点击它,就要捕捉控件的点击范围了有没有人做过相关的功能 ,能否...

439

Transformer模型详解

​本文主要介绍Transformer系列,从基础到理论,对注意力机制进行总结并解释《Attention is all you need》,提出解决sequence to sequence问题的transformer模型,用全attention的结构代替了lstm,抛弃了之前传统的encoder-decoder模型必须结合cnn或者rnn的固有模式,只用attention。文章的主要目的是在减少计算量和提高并行效率的同时不损害最终的实验结果。

专注大数据与人工智能技术分享,欢迎私信加群互相学习! 5307

android ImageButton透明图片的使用

在android上使用图片按钮,经常是圆角或者不规则形状的,这需要用到边缘是透明的png图片,但是如果只设置了ImageButton的背景图片,还达不到上面描述的效果(见下图),我们还需要对ImageButton设置背景属性android:background="#00000000",就实现了不规则按钮的效果了

myairen1365的专栏 3597

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Android Compose Bloom 项目实战 (二) : 欢迎页

上一篇文章我们讲到了 Compose Bloom 项目开发之前的一些配置及沉浸式状态栏的修改。这篇文章接着上文,会介绍欢迎页的开发。

朱豪凯的博客 2107

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Android 不规则按钮button

https://blog.youkuaiyun.com/parcool/article/details/40902203 效果图: 这个是我公司现在的一个小项目。我也不想去担心泄露机密什么的,我觉得有必要把这些东西放到网上大家共享一下。 需求:如图,在房子(整张是一个背景图片)的瓦片上蒙一层(这一层红色的东西后期会去掉,现在只是展示一个区域而已。正因为后面会去掉红色的这一层,那么就不能用图片透明的思路来做了...

快乐李同学的博客 1823

炫酷!这些都是Android中不规则形状View的布局实现!,不吃透都对不起自己

只有三种父布局是不是有点坑?万一我要用ConstraintLayout呢?那岂不是凉凉。没有ConstraintLayout这都被你发现了,由于ConstraintLayout并不存在于系统标准库中,而存在于支持库中,为了减少不必要的引用,让库拥有良好的独立性,故而没有实现(其实是因为懒…)。好了,其实也可以自己实现了,也是很简单的操作。自定义一个ClipPathLayout很简单,首先选择一个ViewGroup,然后实现ClipPathLayout接口。

m0_57472099的博客 1026

android不规则按钮的实现方式

个人使用过的不规则按钮的实现方式有以下几种: 1. 使用矢量图自绘,layer-list,shape都是不可缺少的元素。 2. 使用imagebutton,src设为图片,background设为transparent 3. 使用imagebutton,src不设置,background设置为图片 4. 使用button,使用9patch背景图片,可使用($ANDROID_SDK/tool

y394996630的专栏 3061
上一篇: Android 平铺背景图片
下一篇: 移植MyBB到SAE平台(一)
搬不搬砖
博客等级 码龄24年 36粉丝 13原创
评论 13
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值