基于监听的事件处理

  • 某些特定的事件

基于回调的事件处理

  • 通用性的事件
重写
  • Android组件的回调方法
  • Activity的回调方法

onTouchEvent()
onKeyDown()
onKeyUp()

物理按键事件处理

onKeyDown()
onKeyUp()
onKeyLongPress()

音量键
  • KEYCODE_VOLUME_UP
  • KEYCODE_VOLUME_DOWN
电源键
  • KEYCODE_POWER
返回键
  • KEYCODE_BACK
主屏键
  • KEYCODE_HOME
菜单键
  • KEYCODE_MENU
实现“再按一次”返回主页
public class MainActivity extends Activity {    private long exitTime = 0; //退出时间变量值    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);    }    @Override    public boolean onKeyDown(int keyCode, KeyEvent event) {        if (keyCode == KeyEvent.KEYCODE_BACK) {            exit();            return true;  //拦截返回键        }        return super.onKeyDown(keyCode, event);    }    public void exit() {        if ((System.currentTimeMillis() - exitTime) > 2000) { //计算按键时间差是否大于两秒            Toast.makeText(getApplicationContext(), "再按一次退出程序", Toast.LENGTH_SHORT).show();            exitTime = System.currentTimeMillis();        } else {            finish();            System.exit(0); //销毁强制退出        }    }}

单击事件

  • OnClickListener

长按事件

具体监听操作:

@Overridepublic boolean onLongClick(View v) {registerForContextMenu(v); //将长按事件注册菜单中openContextMenu(v); //打开菜单return false;}

构造菜单:

@Overridepublic void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { //创建菜单super.onCreateContextMenu(menu, v, menuInfo);menu.add("收藏"); //为菜单添加参数menu.add("举报");}

触摸事件

绘制帽子

@Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        Paint paint = new Paint(); //创建Paint对象        //根据图片生成位图对象        Bitmap bitmap = BitmapFactory.decodeResource(this.getResources(), R.drawable.hat);        canvas.drawBitmap(bitmap, bitmapX, bitmapY, paint); // 绘制帽子        if (bitmap.isRecycled()) { // 判断图片是否回收            bitmap.recycle(); // 强制回收图片        }    }

将帽子添加到布局管理器

RelativeLayout relativeLayout = (RelativeLayout) findViewById(R.id.relativeLayout); // 获取相对局管理器relativeLayout.addView(hat); //将hat添加到布局管理器中
戴帽子小游戏
public class HatView extends View {    public float bitmapX;    public float bitmapY;    public HatView(Context context){        super(context);        bitmapX = 65; // 设置帽子的默认显示位置的X坐标        bitmapY = 0; // 设置帽子的默认显示位置的Y坐标    }    @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        Paint paint = new Paint(); //创建Paint对象        //根据图片生成位图对象        Bitmap bitmap = BitmapFactory.decodeResource(this.getResources(), R.drawable.hat);        canvas.drawBitmap(bitmap, bitmapX, bitmapY, paint); // 绘制帽子        if (bitmap.isRecycled()) { // 判断图片是否回收            bitmap.recycle(); // 强制回收图片        }    }}
public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        final HatView hatView=new HatView(MainActivity.this);        hatView.setOnTouchListener(new View.OnTouchListener() {            @Override            public boolean onTouch(View view, MotionEvent motionEvent) {                hatView.bitmapX = motionEvent.getX()-80; // 设置帽子显示位置的X坐标                hatView.bitmapY = motionEvent.getY()-50; // 设置帽子显示位置的Y坐标                hatView.invalidate(); // 重绘hat组件                return false;            }        });        RelativeLayout r1=(RelativeLayout)findViewById(R.id.relativeLayout);        r1.addView(hatView);    }}

单击事件和触摸事件的区别

  1. 首先进行触摸事件检测
  2. 根据返回值来判断是否在进行单击事件

更多相关文章

  1. Android点击事件分发机制源码分析1——Activity
  2. android 桌面小组件小记
  3. Android(安卓)UI 之 获取组件或者元素的坐标
  4. Android(安卓)事件分发机制总结篇
  5. Android(安卓)- 事件模型
  6. 百度地图长按事件
  7. SimpleAdapter响应item点击事件
  8. android的事件分发
  9. java.lang.IllegalStateException: No host

随机推荐

  1. Android重要控件概览(上)
  2. Android DrawerLayout 侧边栏使用之道
  3. Android 打勾显示输入的密码
  4. Android 开发环境安装配置手册
  5. Android(安卓)MonkeyRunner测试NotePad例
  6. MainFest.xml android
  7. 20个Android游戏源码,…
  8. js 判读是iPhone还是Android
  9. android tween动画效果
  10. android在google map上画出导航路线图