一.View自带的长按和点击事件
代码说明:
public class MarqueeTextActivity extends AppCompatActivity {
private TextView textView;
private Button button;
private ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_marqueetext);
textView=findViewById(R.id.activity_motionevent_textview);
button=findViewById(R.id.activity_motionevent_button);
imageView=findViewById(R.id.activity_motionevent_imageview);
textView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
Toast.makeText(MarqueeTextActivity.this,"文本长按",Toast.LENGTH_SHORT).show();
return true;
}
});
button.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
Toast.makeText(MarqueeTextActivity.this,"按钮长按",Toast.LENGTH_SHORT).show();
return true;
}
});
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MarqueeTextActivity.this,"按钮点击",Toast.LENGTH_SHORT).show();
}
});
imageView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
Toast.makeText(MarqueeTextActivity.this,"图片长按",Toast.LENGTH_SHORT).show();
return false;
}
});
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MarqueeTextActivity.this,"图片点击",Toast.LENGTH_SHORT).show();
}
});
}
}
如上
如果 onLongClick 返回 true:长按View时只执行onLongClick方法。
如果 onLongClick 返回 false:长按View时先执行onLongClick方法然后抬起时再执行onClick方法。
二.自定义View的长按事件
代码说明:
public class MarqueeTextActivity extends AppCompatActivity {
private TextView textView;
private Button button;
private ImageView imageView;
private long time1;
private long time2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_marqueetext);
textView = findViewById(R.id.activity_motionevent_textview);
button = findViewById(R.id.activity_motionevent_button);
imageView = findViewById(R.id.activity_motionevent_imageview);
textView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN://按下
time1 = System.currentTimeMillis();
break;
case MotionEvent.ACTION_UP://抬起
time2 = System.currentTimeMillis();
if (time2 - time1 >= 4000) {
Toast.makeText(MarqueeTextActivity.this, "文本自定义长按", Toast.LENGTH_SHORT).show();
}
break;
}
return true;
}
});
button.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN://按下
time1 = System.currentTimeMillis();
break;
case MotionEvent.ACTION_UP://抬起
time2 = System.currentTimeMillis();
if (time2 - time1 >= 4000) {
Toast.makeText(MarqueeTextActivity.this, "按钮自定义长按", Toast.LENGTH_SHORT).show();
}
break;
}
return true;
}
});
imageView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN://按下
time1 = System.currentTimeMillis();
break;
case MotionEvent.ACTION_UP://抬起
time2 = System.currentTimeMillis();
if (time2 - time1 >= 4000) {
Toast.makeText(MarqueeTextActivity.this, "图片自定义长按", Toast.LENGTH_SHORT).show();
}
break;
}
return true;
}
});
}
}
如上 按下的时候记录一个时间戳 抬起的时候记录一个时间戳 然后在抬起的时候比较一下时间戳的 大小即可完成自定义View的长按事件。