Android 自定义按钮点击事件和长按事件对比
发布时间 - 2026-01-11 00:51:39 点击率:次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();
}
}
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# Android
# 自定义按钮点击事件和长按事件
# 自定义按钮
# Android MenuItem 自定义长按事件的实现
# 安卓(Android) 监听按键长按事件
# Android ExpandableListView长按事件的完美解决办法
# Android组件ContextMenu实现长按事件
# 自定义
# 回调
# 按下
# 这一
# 会有
# 这是一个
# 希望能
# 谢谢大家
# 单击
# 新建一个
# 多久
# max
# java
# public
# extends
# Btn
# text
# private
# TextView
# seekbar
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤
如何撰写建站申请书?关键要点有哪些?
千库网官网入口推荐 千库网设计创意平台入口
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
如何在服务器上三步完成建站并提升流量?
简历在线制作网站免费版,如何创建个人简历?
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置
JavaScript如何操作视频_媒体API怎么控制播放
猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?
Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】
Laravel如何为API编写文档_Laravel API文档生成与维护方法
android nfc常用标签读取总结
Laravel项目结构怎么组织_大型Laravel应用的最佳目录结构实践
如何在搬瓦工VPS快速搭建网站?
小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?
iOS发送验证码倒计时应用
如何在建站主机中优化服务器配置?
Edge浏览器如何截图和滚动截图_微软Edge网页捕获功能使用教程【技巧】
Laravel路由怎么定义_Laravel核心路由系统完全入门指南
java ZXing生成二维码及条码实例分享
HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】
Gemini怎么用新功能实时问答_Gemini实时问答使用【步骤】
Laravel Blade模板引擎语法_Laravel Blade布局继承用法
LinuxShell函数封装方法_脚本复用设计思路【教程】
Laravel如何使用Eloquent进行子查询
如何快速搭建安全的FTP站点?
百度输入法全感官ai怎么关 百度输入法全感官皮肤关闭
Java类加载基本过程详细介绍
如何获取PHP WAP自助建站系统源码?
如何用PHP工具快速搭建高效网站?
大学网站设计制作软件有哪些,如何将网站制作成自己app?
英语简历制作免费网站推荐,如何将简历翻译成英文?
清除minerd进程的简单方法
Python文件操作最佳实践_稳定性说明【指导】
Laravel模型事件有哪些_Laravel Model Event生命周期详解
Laravel 419 page expired怎么解决_Laravel CSRF令牌过期处理
Laravel如何处理跨站请求伪造(CSRF)保护_Laravel表单安全机制与令牌校验
Laravel怎么配置.env环境变量_Laravel生产环境敏感数据保护与读取【方法】
bootstrap日历插件datetimepicker使用方法
北京专业网站制作设计师招聘,北京白云观官方网站?
在线制作视频的网站有哪些,电脑如何制作视频短片?
Android仿QQ列表左滑删除操作
Laravel Session怎么存储_Laravel Session驱动配置详解
Laravel广播系统如何实现实时通信_Laravel Reverb与WebSockets实战教程
laravel怎么为应用开启和关闭维护模式_laravel应用维护模式开启与关闭方法
Laravel怎么使用Intervention Image库处理图片上传和缩放
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
Python高阶函数应用_函数作为参数说明【指导】
文字头像制作网站推荐软件,醒图能自动配文字吗?

