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


猜你喜欢
- Spring bean配置单例或多例模式单例spring bean 默认是单例默认,在对应.xml文件中的配置是:<bean id=&
- 前言作为一个服务端开发感觉一直挺排斥框架这种东西的,总觉得什么实现逻辑都帮你封装在里面了,你只需要配置这配置那个,出了问题也不知道怎么排查,
- Device Administration对于这个应用,市场上很多,但是看一下评论就知道效果有多差了,因为99%一键锁屏应用没办法卸载。今天
- 题目:在数组中的两个数字如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数例如在数组{7
- 1. 子类的构造函数如果要引用super的话,必须把super放在函数的首位class Base {Base() {System.out.p
- 这篇文章主要介绍了Java多线程状态及方法实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可
- 前言easyui是一种基于jQuery的用户界面插件集合。easyui为创建现代化,互动,JavaScript应用程序,提供必要的功能。使用
- Spark_SQL性能调优众所周知,正确的参数配置对提升Spark的使用效率具有极大助力,帮助相关数据开发、分析人员更高效地使用Spark进
- 1. Java安装与环境配置Hadoop是基于Java的,所以首先需要安装配置好java环境。从官网下载JDK,我用的是1.8版本。 在Ma
- SLF4J是一个日志框架抽象层,底下绑定具体的日志框架,比如说Log4J,Logback,Java Logging API等。SLF4J也有
- 参考ColorComboBox做修改,并对颜色名做些修正,用于CR MVMixer产品中,聊作备忘~效果图:代码://颜色拾取框using
- 为了让我提供的通用 Mapper 的 boot-starter 同时兼容 Spring Boot 1.x 和 2.x,增加了这么一个工具类。
- 解决Android调用系统分享图片给微信,出现分享失败,分享多文件必须为图片格式近期应公司需求,分享多图片到微信的功能,之前一直是用微信自己
- 查询数据会比较耗时,所以我们想把查询数据放在一个异步任务中,查询结果获得Cursor,然后在onPostExecute (Cursor re
- WebFilter.javapackage com.hongyuan.route;import java.io.File;import ja
- 一、WIndow和windowManagerWindow是一个抽象类,它的具体实现是PhoneWindow,创建一个window很简单,只需
- System.Collections.ArrayList类是一个特殊的数组。通过添加和删除元素,就可以动态改变数组的长度。一.优点1. 支持
- 本文实例为大家分享了Java实现生成n个不重复的随机数的具体代码,供大家参考,具体内容如下需求:根据min和max,生成n个不重复的随机数。
- 本文主要介绍了java8 stream自定义分组求和并排序的实现,分享给大家,具体如下: public static void
- 一、网络爬虫的基本知识网络爬虫通过遍历互联网络,把网络中的相关网页全部抓取过来,这体现了爬的概念。爬虫如何遍历网络呢,互联网可以看做是一张大