aide安卓编程12-屏幕触控

2018-10-09  本文已影响0人  傻傻不知天年

把全部代码替换为:

package com.baobao.sayhello;

import android.app.*;
import android.content.*;
import android.graphics.*;
import android.os.*;
import android.view.*;
import android.widget.*;
class mview extends View{//自定义一个叫mview的新类型,继承View
    int a=0;//定义整数a并初始化为0
    public mview(Context con){//构造(初始化)函数
        super(con);
    }

    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh)
    {
        //窗口大小改变时触发
        super.onSizeChanged(w, h, oldw, oldh);
    }

    @Override
    protected void onDraw(Canvas canvas)
    {
        //绘图时触发
        Paint p=new Paint();
        p.setColor(Color.rgb(255,0,0));
        p.setTextSize(100);
        canvas.drawText(String.valueOf(a),0,100,p);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event)
    {
        //触控屏幕时触发
        if(event.getAction()==MotionEvent.ACTION_DOWN){
            //如果事件类型是触摸屏幕
            a=a+1;//a值增加1
        }
        invalidate();//重画屏幕
        return true;//返回真,表示已处理消息
    }
}
public class MainActivity extends Activity 
{
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        mview view=new mview(this);//新建一个叫view的mview
        setContentView(view);//把view设为整个界面
    }
}
代码 效果

这个程序最开始在界面左上角写着0,每触摸一次屏幕显示的数值就会加1。

代码第10行定义了整数a并初始化为0。

第32~42行是新增的用来处理触控消息的部分。其中每当点击屏幕事件发生,就会执行a=a+1;这样a就变大了1。之后再绘制界面时画的文字就是新的a的值了。

第36行末尾的ACTION_DOWN的意思是按下事件,一共3种常用事件:
ACTION_DOWN 按下(手指从不触摸到触摸)
ACTION_MOVE 移动(手指保持触摸并移动位置)
ACTION_UP 弹起(手指从触摸到不触摸)

如果把代码里的ACTION_DOWN改为ACTION_UP会发现稍微移动手指(甚至感觉没在动)时显示的数就会变很多,这说明移动事件的感知很敏感。

获得触控事件的同时还会获得此时手指的坐标。下面例子是把触摸点的坐标显示到屏幕左上角:

package com.baobao.sayhello;

import android.app.*;
import android.content.*;
import android.graphics.*;
import android.os.*;
import android.view.*;
import android.widget.*;
class mview extends View{//自定义一个叫mview的新类型,继承View
    int x=0,y=0;//定义整数x和y并初始化为0
    public mview(Context con){//构造(初始化)函数
        super(con);
    }

    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh)
    {
        //窗口大小改变时触发
        super.onSizeChanged(w, h, oldw, oldh);
    }

    @Override
    protected void onDraw(Canvas canvas)
    {
        //绘图时触发
        Paint p=new Paint();
        p.setColor(Color.rgb(255,0,0));
        p.setTextSize(100);
        canvas.drawText(String.valueOf(x)+","+String.valueOf(y),0,100,p);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event)
    {
        //触控屏幕时触发
        if(event.getAction()==MotionEvent.ACTION_DOWN){
            //如果事件类型是触摸屏幕
            x=(int)event.getX();//把横坐标值存到x
            y=(int)event.getY();//把纵坐标值存到y
        }
        invalidate();//重画屏幕
        return true;//返回真,表示已处理消息
    }
}
public class MainActivity extends Activity 
{
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        mview view=new mview(this);//新建一个叫view的mview
        setContentView(view);//把view设为整个界面
    }
}
代码 效果
上一篇下一篇

猜你喜欢

热点阅读