Android之触屏事件

方法一:

新建"MyView"类

package onTouchEvent;

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

public class MyView extends View {
    private int textX=20,textY=20;
    public MyView(Context context) {
    super(context);
    setFocusable(true);
        // TODO Auto-generated constructor stub
    }
        //画笔onDraw方法
    @Override
    protected void onDraw(Canvas canvas) {
        // TODO Auto-generated method stub
        super.onDraw(canvas);
        //初始化画笔
        Paint paint=new Paint();
        //设置颜色
        paint.setColor(Color.GREEN);
        //设置字体大小
        paint.setTextSize(50);
        //在画布上写文字
        canvas.drawText("Android", textX, textY, paint);
    }
    
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        // TODO Auto-generated method stub
        //获取用户手指触屏的X坐标赋值与文本的X坐标
        textX=(int)event.getX();    
        //获取用户手指触屏的Y坐标赋值与文本的Y坐标
        textY=(int)event.getY();        
        //重绘画布
        invalidate();
        return true;
            
    }
    
}

MainActivity中将setContentView设置为当前MyView,即

setContentView(new MyView(this));

执行效果图如下:

 

方法二:

方法二的不用之处就是使用了SurfaceHolder(选择器)方法

package com.example.cdp;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;

public class MySurfaceView extends SurfaceView implements Callback {
    //定义一个SurfaceHolder相当于选择器
    private SurfaceHolder sfh;
    private int textX=20,textY=20;
    public MySurfaceView(Context context) {
    super(context);
    // TODO Auto-generated constructor stub
    //获得SurfaceHolder对象
    sfh = getHolder();
    //监听surface的生命周期
    sfh.addCallback(this);
    //获得焦点
    setFocusableInTouchMode(true);
    }
    @Override
    public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
        // TODO Auto-generated method stub
        
    }
    @Override
    public void surfaceCreated(SurfaceHolder arg0) {
        // TODO Auto-generated method stub
        myDraw();
    }
    
    private void myDraw() {
        // TODO Auto-generated method stub
        new Thread(){
            public void run() {
                // 通过SurfaceHolder对象获得 Surface的Canvas成员变量,并且锁住Canvas
                Canvas canvas = sfh.lockCanvas();
                // 刷屏
                canvas.drawColor(Color.BLACK);
                // 初始画笔
                Paint paint = new Paint();
                // 设置抗锯齿,文字清晰点,不过相对比较耗性能
                paint.setAntiAlias(true);
                // 设置画笔颜色
                paint.setColor(Color.RED);
                // 设置文字大小
                paint.setTextSize(50);
                // 画(写)文字
                canvas.drawText("Android", textX, textY, paint);
                // 画完后,再将缓存的内容渲染到屏幕上,同时也是解锁
                sfh.unlockCanvasAndPost(canvas);
            };
        }.start();    
    }
    
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        // TODO Auto-generated method stub
        //return super.onTouchEvent(event);
        // 获取用户手指触屏的X坐标赋值与文本的X坐标
        textX = (int) event.getX();
        // 获取用户手指触屏的Y坐标赋值与文本的Y坐标
        textY = (int) event.getY();
        myDraw();
        return true;
    }
    @Override
    public void surfaceDestroyed(SurfaceHolder arg0) {
        // TODO Auto-generated method stub
        
    }

}

执行效果图:

不努力,还要青春干什么?
原文地址:https://www.cnblogs.com/caidupingblogs/p/4972057.html