Android(安卓)笔记5---事件处理和手势
16lz
2021-01-26
Android事件处理和手势
- [1] 事件处理概述
- [2] 物理按键事件
- [3]单击事件
- [4]长按事件
- [4]触摸事件
- [5]手势检测
[1] 事件处理概述
- 基于监听的事件处理
- 基于回调的事件处理
重写相应方法实现
[2] 物理按键事件
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode==KeyEvent.KEYCODE_BACK){ exit(); return true; } return super.onKeyDown(keyCode, event); } private void exit() { if(System.currentTimeMillis()-exitTime>2000){ Toast.makeText(MainActivity.this,"再按一次退出应用程序",Toast.LENGTH_SHORT).show(); exitTime=System.currentTimeMillis(); }else{ finish(); System.exit(0); } }
[3]单击事件
setOnClickListener()
[4]长按事件
2秒以上setOnLongClickListener()
//示例代码 add.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { //1.注册菜单 registerForContextMenu(v); //2.打开菜单 openContextMenu(v); return true; } }); } @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); menu.add("收藏"); menu.add("举报"); }}
[4]触摸事件
单击事件触发一个动作
触摸事件触发两个动作,按下和抬起
//图像重绘对象 public class RabbitView extends View { public float bitmapX; public float bitmapY; public RabbitView(Context context) { super(context); //构造方法中赋初值 bitmapX=290; bitmapY=130; } //重写ondraw方法 @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); //1建立画笔 Paint paint = new Paint(); //2.解析资源 Bitmap bitmap = BitmapFactory.decodeResource(this.getResources(),R.mipmap.touzi); //3.绘制 canvas.drawBitmap(bitmap,bitmapX,bitmapY,paint); //4.回收图片 if(bitmap.isRecycled()){ bitmap.recycle(); } }}
[5]手势检测
GestureDetector
GestureDetector.OnGestureListener 重写所有方法
//示例代码//第一步:让类实现GestureDetector.onGestureListener并重写所有方法public class MainActivity extends AppCompatActivity implements GestureDetector.OnGestureListener { private int [] images={ R.mipmap.b1,R.mipmap.b2,R.mipmap.b3, R.mipmap.b4,R.mipmap.b5,R.mipmap.b6, R.mipmap.b7,R.mipmap.b8,R.mipmap.b9 }; final int distance=50; //第二步:定义一个全局的手势检测器 GestureDetector detector ; private ViewFlipper flipper; Animation [] animation=new Animation[4]; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); detector = new GestureDetector(MainActivity.this,this); //实例化GestureDetector //第三步:将要显示的图片加载到viewFlipper中,并初始化动画资源数组 flipper = findViewById(R.id.flipper); for(int i=0;idistance){ flipper.setInAnimation(animation[2]); flipper.setOutAnimation(animation[1]); flipper.showPrevious(); return true; //从左向右滑 }else if(e2.getX()-e1.getX()>distance){ flipper.setInAnimation(animation[0]); flipper.setOutAnimation(animation[3]); flipper.showNext(); return true; } return false; } //第五步:把Activity上的触摸事件交给GestureDetector处理 @Override public boolean onTouchEvent(MotionEvent event) { return detector.onTouchEvent(event); }}
更多相关文章
- Android之广播大全 Intent Action 事件
- Android(安卓)- AppCompatEditText 重写,实现 3个文字中间使用空
- 浅尝安卓事件分发机制
- Android(安卓)H5 js webView初体验
- Android(安卓)View的事件分发机制
- Android应用程序Click事件与Touch事件处理
- Android中OptionMenu用法实例
- 关于Android触屏监听的一些想法
- S5PV310 Android(安卓)电容屏驱动调试