Android 自定义按钮点击事件和长按事件对比
一个按钮同时实现点击和长按事件,有时候会有冲突,我们针对这一现象来自定义按钮来区分点击和长按事件
1.xml中
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;
}
});
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{
private boolean clickdown = false;
private LongTouchListener mListener;
private int mtime;
public LongTouchBtn(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
@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);
}
private void sleep(int time) {
try {
Thread.sleep(time);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
class LongTouchTask extends AsyncTask{
@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();
}
}
public void setonLongTouchListener(LongTouchListener listener, int time) {
mListener = listener;
mtime = time;
}
public interface LongTouchListener {
void onLongTouch();
}
}
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!



