Android自己定义button实现长按功能

通过自己定义BUTTON,写一个LongTouchBtn类,在按下的时候运行onTouchEvent事件,通过这个事件使用回调函数来实现长按功能!

XML:

 <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"
/>

activity:

public class MainActivity extends Activity {
private TextView Tv1;
private LongTouchBtn Btn1;
private int num=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); 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", "自己定义button处理单击"); }
});
Btn1.setOnLongClickListener(new View.OnLongClickListener() { @Override
public boolean onLongClick(View v) {
Log.i("huahua", "自己定义button处理长按一次对应");
return false;
}
}); /**
* 这是一个自己定义的接口 专门负责处理长按逻辑
* @param listener
* 监听器。 * @param time
* 第2个參数传入1000 ,表示1秒处理一次onLongTouch()方法
*/
Btn1.setOnLongTouchListener(new LongTouchListener() { @Override
public void onLongTouch() {
num++;
Tv1.setText(num+"");
Log.i("huahua", "正在长按"); }
},1000);
}
}

huahua.btnlongtouch.LongTouchBtn:

public class LongTouchBtn extends Button{

	/**
* 记录当前自己定义Btn是否按下
*/
private boolean clickdown = false; /**
* 下拉刷新的回调接口
*/
private LongTouchListener mListener; /**
* button长按时 间隔多少毫秒来处理 回调方法
*/
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; } /**
* 长按监听接口,使用button长按的地方应该注冊此监听器来获取回调。 */
public interface LongTouchListener { /**
* 处理长按的回调方法
*/
void onLongTouch();
}
}

Android自己定义button实现长按功能的更多相关文章

  1. Android自己定义截屏功能,相似QQ截屏

    由于公司业务需求 须要对一个屏幕进行截屏.但自带的截屏功能是远远不够项目的功能需求 ,我们是做一个画板软件 .须要的像QQ那样截屏之后 ,能够看到我们自己定义的工具.有画笔,button等等 .and ...

  2. C# 利用 Time 组件实现 Button 控件的长按功能

    参考链接:https://blog.csdn.net/yongh701/article/details/50134379 如果在C#窗体,单纯点击按钮,之后将鼠标长时间放在这个按钮上,不放开,双击按钮 ...

  3. Android自己定义控件而且使其能够在xml中自己定义属性

    为什么要自己定义View android开发中自己定义View的优点是显而易见的.比方说以下的这个顶部导航,它被设计出如今应用的每一个界面,但每次的内容却不尽同样.我们不能在每一个layout资源中都 ...

  4. ANDROID自己定义视图——onLayout源代码 流程 思路具体解释

    转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 简单介绍: 在自己定义view的时候.事实上非常easy.仅仅须要知道3步骤: 1.測量- ...

  5. 【Android】3.15 短串分享功能

    分类:C#.Android.VS2015.百度地图应用: 创建日期:2016-02-04 一.简介 短串分享是指,用户搜索查询后得到的每一个地理位置结果将会对应一条短串(短链接),用户可以通过短信.邮 ...

  6. 【Android】3.14 公交线路查询功能

    分类:C#.Android.VS2015.百度地图应用: 创建日期:2016-02-04 一.简介 利用BusLineSearch方法可查询公交线路的详情信息. 二.运行截图 简介:介绍查询公交线路功 ...

  7. Android自己定义View的实现方法

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/17357967 不知不觉中,带你一步步深入了解View系列的文章已经写到第四篇了.回 ...

  8. android 自己定义控件

    Android自己定义View实现非常easy 继承View,重写构造函数.onDraw.(onMeasure)等函数. 假设自己定义的View须要有自己定义的属性.须要在values下建立attrs ...

  9. 【Android自己定义View实战】之自己定义超简单SearchView搜索框

    [Android自己定义View实战]之自己定义超简单SearchView搜索框 这篇文章是对之前文章的翻新,至于为什么我要又一次改动这篇文章?原因例如以下 1.有人举报我抄袭,原文链接:http:/ ...

随机推荐

  1. Selenium2+python自动化47-判断弹出框存在(alert_is_present)【转载】

    前言 系统弹窗这个是很常见的场景,有时候它不弹出来去操作的话,会抛异常.那么又不知道它啥时候会出来,那么久需要去判断弹窗是否弹出了. 本篇接着Selenium2+python自动化42-判断元素(ex ...

  2. tcpdump 学习(3):MySQL Query

    在MySQL线上环境我们一般只打开了binary log,slow log,有时我们需要查看general log呢?因为该log记录所有的请求,打开该日志肯定给磁盘造成很大压力,IO能力有所下降,所 ...

  3. 开发者应该了解的API技术清单!

    英文原文:API-Driven Development 作为一名开发者,诚然编写代码如同作家提笔挥毫,非常有成就感与乐趣,但同时我也觉得删除代码是件不相伯仲的美事.为什么呢?因为在进行删除工作时,意味 ...

  4. 看不到Harbor我也睡不着觉啊

    上午打球,下午陪小孩子看上海科技展,晚上搞定harbor. 完美!!!:) 参考文档: https://www.dwhd.org/20161023_110618.html http://blog.cs ...

  5. ionic3 关于屏幕方向问题

    关于屏幕方向问题 使用ionic-native中的screen-orientation ionic cordova plugin add cordova-plugin-screen-orientati ...

  6. 记录一次WebService使用的经历

    于业务需要,需要和第三方对接一些接口,但是问题是,他们的接口提供是webservice的,本人只精通restful接口(也就是说我比较年轻^-^).好在对面人特别奈斯,一顿指导我,感谢. 废话不多说了 ...

  7. (十六)MySQL集群galera实现

    (1)环境介绍 galera官网:http://galeracluster.com/downloads/ # cat /etc/redhat-release CentOS Linux release ...

  8. npm命令要记

    npm list - depth 0 查看依赖 cnpm install 安装 npm outdated 查看模块过时 npm cache clear

  9. Storm学习中遇到的问题整理

    在编写storm代码来进行实时分析的时候遇到了一些问题,有些的确令人比较头痛,现在稍微做一下整理.数据流向(本地-Spout-Bolt-Hdfs) 1数据的输入输出文件的路径选择 因为在此项目中数据是 ...

  10. 13、Flask实战第13天:SQLAlchemy操作MySQL数据库

    安装MySQL 在MySQL官网下载win版MySQL 双击运行 后面根据提示设置密码然后启动即可,这里我设置的密码是:123456 我们可以通过Navicat客户端工具连接上MySQL addres ...