把全部代码替换为:
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设为整个界面
}
}
代码
效果
网友评论