Android事件机制

事件处理机制:基于监听的事件处理机制,基于回调的事件处理机制。

基于监听的事件处理

处理模型:

  1. 事件源
  2. 事件
  3. 事件监听器
    委派式事件处理方式:事件源讲整个事件处理机制委托给事件监听器;当该事件源发送指定的事件时,就通知所委托的事件监听器,由事件监听器来处理这个事件。
示例

控制飞机移动

package com.example.plane;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.util.TypedValue;
import android.view.View;

import java.util.Timer;
import java.util.TimerTask;

public class PlaneView extends View {
    //坐标
    float currentX;
    float currentY;
    //画笔
    private Paint p = new Paint();
    private Bitmap plane0;
    private Bitmap plane1;
    private int index;
    //private int index=0;

    public PlaneView(Context context) {
        super(context);
        //定义飞机图片
        plane0= BitmapFactory.decodeResource(context.getResources(), R.drawable.rc);
        plane1= BitmapFactory.decodeResource(context.getResources(), R.drawable.ass);
        //启动定时器切换飞机图片,实现动画效果
        new Timer().schedule(new TimerTask() {
            @Override
            public void run() {
                index++;
                PlaneView.this.invalidate();
            }
        },0L,100L);
        setFocusable(true);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        //绘制飞机
        canvas.drawBitmap(index%2==0?plane0:plane1,currentX,currentY,p);
    }

}


package com.example.plane;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.Display;
import android.view.MotionEvent;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;

public class MainActivity extends AppCompatActivity {
    //定义飞机移动的速度
    private int speed = 10;
    private PlaneView planeView;
    DisplayMetrics metrics;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //去掉窗口标题
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        //全屏显示
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
        //创建PlaneView组件
        planeView = new PlaneView(this);
        setContentView(planeView);
        planeView.setBackgroundResource(R.drawable.ic_baseline_blur_on_24);
        //获取窗口管理器
        WindowManager windowManager = getWindowManager();
        Display display =windowManager.getDefaultDisplay();
        metrics = new DisplayMetrics();
        //获取屏幕宽和高
        display.getMetrics(metrics);
        //设置飞机的初始位置
        planeView.currentX=(metrics.widthPixels/2);
        planeView.currentY=(metrics.heightPixels-200);
        planeView.setOnTouchListener(new MyTouchListener());
    }
    class MyTouchListener implements View.OnTouchListener{

        @Override
        public boolean onTouch(View view, MotionEvent motionEvent) {
            if(motionEvent.getX()<metrics.widthPixels/8){
                planeView.currentX-=speed;
            }
            if(motionEvent.getX()>metrics.widthPixels*7/8){
                planeView.currentX+=speed;
            }
            if(motionEvent.getY()<metrics.widthPixels/8){
                planeView.currentY-=speed;
            }
            if(motionEvent.getY()>metrics.widthPixels*7/8){
                planeView.currentY+=speed;
            }
            return true;
        }
    }
}

响应系统设置的事件

Configuration类专门用于描述手机设备上的配置信息。

AsyncTask

AsyncTask是一个抽象类,通常用于被继承,继承AsyncTask时需要指定三个参数

  • Params:启动任务执行的输入参数的类型
  • Progress:后台任务完成的进度值的类型
  • Result:后台执行任务完成后返回结果的类型
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值