Android事件处理

一、基于监听的事件处理

1.监听处理模型

是个委派式事件处理方式
例如:A公司发生火灾,自己不会处理,委派给消防局处理。在这里事件源是A公司,事件是火灾,事件监听器是消防局。A公司根据发生的事件不同,把任务委派给不同的处理单位,消防局也不是单单为A公司服务的,同时会监听B公司、C公司等的委派。

  1. EventSource(事件源):事件发生的地方,如按钮
  2. Event(事件):发生的事,一般就是用户的一次操作
  3. EventListener(事件监听器):监听事件源发生的事件,并作出响应
    事件处理流程

点击监听

package com.example.tlh;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

/**
 1. 点击监听就是最常见的监听事件
 2. 事件源:按钮
 3. 事件:点击
 4. 事件监听器:View.OnClickListener()
 */
public class MainActivity extends AppCompatActivity {
    private Button button;
    private TextView show;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        button = (Button) findViewById(R.id.button);
        show = (TextView) findViewById(R.id.show);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                show.setText("点击了");
            }
        });
    }
}

2.监听器的形式

  1. 内部类(如果你多个按钮需要同一个处理)
  2. 匿名内部类(我这里使用的)
  3. 外部类(如果你多个类内需要同样的事件处理)
  4. Activity本身作为监听器(代码简单,就是怪怪的,不建议使用)
  5. 直接绑定到标签(使用简单)

二、基于回调的事件处理

1.回调处理模型

    和基于监听的事件委派式处理方式完全不同。在基于回调的事件处理,事件源和事件监听器是一体的,或者说没有事件监听器。

2.View给我们提供的回调方法

方法名介绍
onKeyDown按下按键
onKeyLongDown长按按键
onKeyShortcut快捷键
onKeyUp松开按键
onTouchEvent触摸触摸屏相关事件
onTrackballEvent轨迹球

3.基于回调的事件传播

        几乎所有基于回调的事件处理方法都有一个boolean类型的返回值,用于标示该处理方法是否能完全处理该事件。
        - true 表明已经完全处理该事件,该事件不会再传播出去。
        - false 表明该事件并未完全处理该事件

4.onTouchEvent回调监听

package com.example.tlh;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.MotionEvent;
import android.view.View;

/**
 * 重写onTouchEvent方法响应触摸事件
 */
public class MyView extends View {

    private Paint paint = new Paint();

    private float cx = 40;
    private float cy = 40;
    private float r = 15;

    public MyView(Context context) {
        super(context);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        paint.setColor(Color.RED);
        canvas.drawCircle(cx, cy, r, paint);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        // 获取当前XY坐标
        this.cx = event.getX();
        this.cy = event.getY();
        // 重绘
        this.invalidate();
        // 已经处理完该事件
        return true;
    }

}

三、响应系统设置的事件

1.Configuration类

专门获取手机设备上的配置信息
在Activity中使用如下方法可获取:

Configuration cfg = getResources().getConfiguration();

常用属性

属性名介绍
fontScale字体的缩放因子
fontScale字体的缩放因子
keyboard关联的键盘类型
keyboardHidde键盘是否可用
locale获取当前Locale值
mcc移动信号国家码
mnc移动信号网络码
navigation方向导航设备类型
orientation屏幕方向
touchscreen触摸方式

2.监听系统设置改变(onConfigurationChanged)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值