Android 自定义按钮点击事件和长按事件对比
作者:lqh 发布时间:2023-06-04 00:57:14
标签:Android,自定义,按钮
Android 自定义按钮点击事件和长按事件对比
一个按钮同时实现点击和长按事件,有时候会有冲突,我们针对这一现象来自定义按钮来区分点击和长按事件
1.xml中
<LinearLayout 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"
tools:context="com.example.adfaf.MainActivity"
android:orientation="vertical"
>
<huahua.btnlongtouch.LongTouchBtn
android:id="@+id/btn2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="自定义Btn" />
<TextView
android:id="@+id/tv1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="0"
/>
<SeekBar
android:id="@+id/seekbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:max="100"
/>
</LinearLayout>
2.MainActivity中
public class MainActivity extends Activity {
private TextView Tv1;
private LongTouchBtn Btn1;
private int num=0;
private SeekBar sbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sbar= (SeekBar) findViewById(R.id.seekbar);
Tv1 = (TextView)findViewById(R.id.tv1);
Btn1 = (LongTouchBtn)findViewById(R.id.btn2);
Btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
Log.i("huahua", "自定义按钮处理单击");
}
});
Btn1.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
Log.i("huahua", "自定义按钮处理长按一次相应");
return true;
}
});
/**
* 这是一个自定义的接口 专门负责处理长按逻辑
* @param listener
* * 。
* @param time
* 第2个参数传入1000 ,表示1秒处理一次onLongTouch()方法
*/
Btn1.setOnLongTouchListener(new LongTouchListener() {
@Override
public void onLongTouch() {
num++;
int seekbar_progress = sbar.getProgress();
Log.i("huahua", "seekbar_progress="+seekbar_progress);
seekbar_progress++;
sbar.setProgress(seekbar_progress);
Tv1.setText(num+"");
Log.i("huahua", "正在长按");
}
},1000);
}
}
3.新建一个自定义的LongTouchBtn类
public class LongTouchBtn extends Button{
/**
* 记录当前自定义Btn是否按下
*/
private boolean clickdown = false;
/**
* 下拉刷新的回调接口
*/
private LongTouchListener mListener;
/**
* 按钮长按时 间隔多少毫秒来处理 回调方法
*/
private int mtime;
/**
* 构造函数
* @param context
* @param attrs
*/
public LongTouchBtn(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
/**
* 处理touch事件
*/
@Override
public boolean onTouchEvent(MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_DOWN)
{
clickdown = true;
new LongTouchTask().execute();
Log.i("huahua", "按下");
}
else if(event.getAction() == MotionEvent.ACTION_UP)
{
clickdown = false;
Log.i("huahua", "弹起");
}
return super.onTouchEvent(event);
}
/**
* 使当前线程睡眠指定的毫秒数。
*
* @param time
* 指定当前线程睡眠多久,以毫秒为单位
*/
private void sleep(int time) {
try {
Thread.sleep(time);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
/**
* 处理长按的任务
*/
class LongTouchTask extends AsyncTask<Void, Integer, Void>{
@Override
protected Void doInBackground(Void... params) {
while(clickdown)
{
sleep(mtime);
publishProgress(0);
}
return null;
}
@Override
protected void onPostExecute(Void result) {
}
@Override
protected void onProgressUpdate(Integer... values) {
mListener.onLongTouch();
}
}
/**
* 给长按btn控件注册一个 * 。
*
* @param listener
* * 的实现。
* @param time
* 多少毫秒时间间隔 来处理一次回调方法
*/
public void setOnLongTouchListener(LongTouchListener listener, int time) {
mListener = listener;
mtime = time;
}
/**
* 长按监听接口,使用按钮长按的地方应该注册此 * 来获取回调。
*/
public interface LongTouchListener {
/**
* 处理长按的回调方法
*/
void onLongTouch();
}
}
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
来源:http://blog.csdn.net/wu371894545/article/details/53525282
0
投稿
猜你喜欢
- 本文实例讲述了Android编程实现的短信编辑器功能。分享给大家供大家参考,具体如下:修改短信数据库,从而生成任意手机号发送的短信。Andr
- T4简介T4(Text Template Transformation Toolkit)在 Visual Studio 中,“T4 文本模板
- 关于Spring Data JPA中自定义sql 条件的 in参数记录此文做一个记录,以便以后观看,也希望正在遇到同样问题的同学能有所启发,
- 1.RSA加密算法是一种非对称加密算法。在公开密钥加密和电子商业中RSA被广泛使用。RSA公开密钥密码体制。所谓的公开密钥密码体制就是使用不
- 前言在我的申请下,公司终于购买了一台基于Android12.0的手机,然后我就开心的拿去安装测试了,发现程序崩溃了,于是我这里就写下来,An
- java常量池技术java中常量池技术说的通俗点就是java级别的缓存技术,方便快捷的创建一个对象。当需要一个对象时,从池中去获取(如果池中
- Android RollPagerView实现轮播图android图片轮播效果,RollViewPager的简单使用 <c
- 本文实例讲述了C#生成随机数的方法。分享给大家供大家参考。具体如下:/// <summary> /// 生成num位
- 数据层测试事务回滚pom.xml导入对应的一些坐标,mysql,Mp,等<dependency> &
- 今天重新装了编译器,结果崩无极限,真是日了狗了了。刚刚才知道问题在哪边。好了,说正事,对于ios开发我没接触,不是很了解,百度了半天,差不多
- 0、前言本文主要对几种常见Java序列化方式进行实现。包括Java原生以流的方法进行的序列化、Json序列化、FastJson序列化、Pro
- 该说不唠,直接上代码。可直接复制使用package com.yuezhi.util;import java.math.BigDecimal;
- C# 匿名函数、lambda表达式、Linq查询一、匿名函数的使用匿名函数是一个“内联”语句或表达式
- C#之委托委托:顾名思义,让别人帮你办件事。委托是C#实现回调函数的一种机制。可能有人会问了,回调函数是个啥???举个例子:我现在是一家公司
- 1.android 消息循环有4个重要的类Handler、Message、Looper、MessageQueuehandler 用来发送、处
- Message的创建消息Message一般不支持大家直接通过new的方式进行创建的,因为Message作为Android系统中使用频率非常高
- 相信很多人在读取文件的时候都会碰到乱码的情况,所谓乱码就是错乱的编码的意思,造成乱码的是由于编码不一致导致的。演示程序:新建3个文本文件:编
- 目录引言简单遍历筛选符合某属性条件的List集合获取某属性返回新的List集合获取以某属性为key,其他属性或者对应对象为value的Map
- Java的反射机制允许我们对一个类的加载、实例化、调用方法、操作属性的时期改为在运行期进行,这大大提高了代码的灵活度。但在运行期进行反射操作
- CountDownLatch 是一个非常实用的多线程控制工具类。” Count Down ” 在英文中意为倒计数, Latch 为门问的意思