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自定义控件实现不规则区域点击事件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

APM 飞行模式切换--源码详解

APM飞控中有很多种方式可以改变飞行模式。其中最常见的为遥控器切换和地面站切换两种方式。 下面以遥控器切换为例详解飞行模式切换逻辑。 APM遥控器切换飞行模式的源代码在RC_Channel.cpp文件中的RC_Channel_Copter::do_aux_function_change_mode()函数中。 const bool success = copter.set_mode()调用Copter::set_mode()函数,在set_mode()函数中调用mode_fro...

qq_30623591的博客 2440

Android 不规则按钮

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

parcool的专栏 3338

#基于原生JS的交互式代码高亮编辑器实现教程

本文介绍了一个轻量级交互式代码高亮编辑器的实现方案。该编辑器采用原生JavaScript开发,支持语法高亮、行号显示、主题切换等核心功能,适合嵌入博客、文档等场景使用。 项目技术栈包括HTML5/CSS3/JavaScript,使用Prism.js实现语法高亮,prettier提供代码格式化功能。编辑器界面分三个区域:顶部工具栏(语言选择/主题切换)、中间编辑区(行号+代码)、底部状态栏(语言/字符数)。 核心功能实现包括:通过contenteditable属性创建可编辑区域,Flex布局实现行号与代码同步

qq_42386733的博客 1038

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

深度学习Halcon中GPU显存利用率高,但GPU、CPU利用率较低,导致模型训练速度很慢,通过设置硬件参数的解决方法

深度学习Halcon中GPU显存利用率高,但GPU、CPU利用率较低,导致模型训练速度很慢,通过设置硬件参数的解决方法 前言 在训练自己模型的时候,会遇到GPU显存利用率高,但GPU、CPU利用率较低,导致模型训练速度很慢的问题。这个问题一方面是由于硬件没有设置到最佳工作状态,另一方面是代码中参数没有设置好。最近在跑Halcon DL遇到这个问题,而Halcon不像开源的几个框架那样自由,代码封装的比较多。所以遇到这种问题,只能在参数最优的情况下,通过设置硬件参数来提升性能。 当然,在跑DL之前,无论什么框

ZiLiangQin的博客 9915

carsim与simulink联合仿真学习笔记(二)——使用C-class车模做driver model仿真(5 driver sensors)

Driver model 在carsim的Simulink库中自带外部驾驶员模型,打开后如图所示: 然后打开carsim中对应的数据集,如图所示: 具体仿真步骤不在赘述,注意到这里选择的是E-Class车模,那么如果我想选择C-Class车型进行仿真呢?点三角选择车型可以看到: 马赛克部分是我后来建的,如过没有使用过是没有马赛克部分的。那么既然这里没有C-class,又该怎么办呢? 创建C-...

xufuqiang2017的博客 4118

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

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

qq_41910181的博客 1555

FPGA远程升级必备:STARTUPE2原语控制Flash的避坑指南

本文深入解析了FPGA远程升级中STARTUPE2原语的核心价值与配置策略,详细介绍了其在QSPI Flash接口设计中的应用。通过Vivado工具和原语控制,开发者可以高效实现安全可靠的远程固件升级,提升系统稳定性和升级效率。

k8l9m0n的博客 398

不规则按钮

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

Dway 563

MS2107 CVBS转USB2.0 音视频采集芯片,支持1080P@30HZ输出

MS2107 是一款视频和音频采集芯片,支持CVBS转USB2.0 ;可以将 CVBS、S-Video 和音频信号通过 USB接口传送到 PC、智能手机和平板电脑上预览或采集。

TEL18967112838的博客 2076

第一章 Cheat Enginee(CE)使用指南

Cheat Engine核心功能详细说明(以植物大战僵尸为例) 教你修改单机游戏。

m0_74545731的博客 1万+

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

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

439

【通信协议】GATT 与 BLE HID 工作原理详解

详细介绍BLE HID 跟GATT工作原理与两者的交互关系

以实战经验介绍行业知识 844

android ImageButton透明图片的使用

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

myairen1365的专栏 3597

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

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

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

朱豪凯的博客 2107

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Android 不规则按钮button

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

快乐李同学的博客 1823

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

炫酷!这些都是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、付费专栏及课程。

余额充值