自定义ImageView处理其长按和点击事件
来源:互联网 发布:淘宝刷好评多少钱一单 编辑:程序博客网 时间:2024/05/22 15:06
在最近的工作中,有一个需求,就是需要自定义一个按钮,在点击的时候进行拍照,在长按的时候进行视频的录制模式,所以想到了继承ImageView,或者其他的Button也OK,在事件拦截中去处理该操作。具体的思路是在MotionEvent.ACTION_DOWN方法中去启动一个线程去进行计时操作,如果在指定时间段内,比如500毫秒,没有将手指抬起来,则认为用户进行了长按的操作,否则用户就是进行了点击按钮的操作,就可以当作拍照处理。以下是具体的代码实现,注释比较清楚:
package com.example.cretin.previoustesttwo;
import android.annotation.TargetApi;
import android.content.Context;
import android.os.Build;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.ImageView;
/**
* Created by cretin on 15/12/15.
*/
public class TakePhotoView extends ImageView {
//是否释放了
private boolean isReleased;
//计数器,防止多次点击导致最后一次形成longpress的时间变短
private int mCounter;
//长按的runnable
private Runnable mLongPressRunnable;
//定义相应时间 以此为依据判断是长按还是短按 默认为300毫秒
private int minTime = 300;
public int getMinTime() {
return minTime;
}
public void setMinTime(int minTime) {
this.minTime = minTime;
}
public OnTakePhotoClickListener getShortClickListener() {
return shortClickListener;
}
public void setShortClickListener(OnTakePhotoClickListener shortClickListener) {
this.shortClickListener = shortClickListener;
}
private OnTakePhotoClickListener shortClickListener;
private OnLongTakePhotoClickListener longClickListener;
public OnLongTakePhotoClickListener getLongClickListener() {
return longClickListener;
}
public void setLongClickListener(OnLongTakePhotoClickListener longClickListener) {
this.longClickListener = longClickListener;
}
public TakePhotoView(Context context) {
this(context, null,0);
}
public TakePhotoView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public TakePhotoView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
mLongPressRunnable = new Runnable() {
@Override
public void run() {
mCounter--;
//计数器大于0,说明当前执行的Runnable不是最后一次down产生的 判断为短按。
if(mCounter>0 || isReleased) {
if (shortClickListener != null) {
shortClickListener.onClick();
}
return;
}
//否则判断为长按操作
if(longClickListener!=null){
longClickListener.onLongClick();
}
}
};
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public TakePhotoView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
this(context, attrs, defStyleAttr);
}
public boolean dispatchTouchEvent(MotionEvent event) {
switch(event.getAction()) {
case MotionEvent.ACTION_DOWN:
mCounter++;
isReleased = false;
postDelayed(mLongPressRunnable, minTime);
break;
case MotionEvent.ACTION_UP:
//释放了
isReleased = true;
break;
}
return true;
}
/**
* 为长按拍照设置一个监听事件
*/
public interface OnLongTakePhotoClickListener {
void onLongClick();
}
/**
* 为短按拍照设置一个监听事件
*/
public interface OnTakePhotoClickListener {
void onClick();
}
}
0 0
- 自定义ImageView处理其长按和点击事件
- Android RecyclerView自定义点击事件和长按事件
- RecyclerView自定义点击事件和长按事件
- Android自定义TextView链接点击和长按事件
- Android长按事件和点击事件问题处理,OnItemLongClickListener和OnItemClickListener冲突问题
- Android长按事件和点击事件问题处理,OnItemLongClickListener和OnItemClickListener冲突问题
- Android长按事件和点击事件问题处理,OnItemLongClickListener和OnItemClickListener冲突问题
- Android自定义按钮点击事件和长按事件的区分
- RecyclerView 使用 点击事件和长按
- listView的点击事件失效处理、和其属性
- Android-UI布局---RecyclerView学习(一)在适配器中自定义长按和点击事件
- 【ExpandableListView】---2 长按和点击处理
- Launcher桌面点击&长按&拖动事件处理流程分析
- Launcher桌面点击&长按&拖动事件处理流程分析 .
- Launcher桌面点击&长按&拖动事件处理流程分析
- ListView长按事件和点击事件监听
- ListView的长按事件和点击事件
- ListView的item的点击事件和长按事件
- STS中搭建SpringMVC工程
- Spring 容器AOP的实现原理——动态代理
- RTImageAssets 自动生成 AppIcon 和 @2x @1x 比例图片
- POJ 3050 Hopscotch(dfs,暴力搜索)
- xmpp/aSmack源码分析(基于android客户端)
- 自定义ImageView处理其长按和点击事件
- 35 岁程序员的独家面试经历
- carrierwave实现图片上传
- Linux 下的Makefile(一)
- UI考试错题集
- JAVA SSL HTTPS 连接详解 生成证书
- 提升“果断力”的六个窍门
- vl_feat库的安装
- 通过Spring Session实现新一代的Session管理