作者MattBonner (毁灭性射手)
看板AndroidDev
标题[问题] canvas 画图问题
时间Fri Aug 3 16:04:46 2012
大家好
小弟目前写了一只APP
其中有个功能是 当手势在萤幕上 由右往左 划
canvas就绘画横线
反之 由左往右划
canvas就绘画直线
程式流程大概为
用XY座标判断使用者是左划还右划
判断完後先清除surfaceview 在画线
可是执行後 canvas画了第一条线後 再画第二条
第一条不会被清除 还是会在
执行画面如下图
先画第一条
http://ppt.cc/yr_R
在画另一条(原本的横线还是在,没有被清除)
http://ppt.cc/X6RJ
部分主要程式码如下
//判断手势
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
// TODO Auto-generated method stub
Log.i("Fling", "Fling Happened!");
draw(drawAction.clear);
if (e1.getX() - e2.getX() > 150) {
draw(drawAction.draw_h);
present_status.setText("横线");
} else if (e1.getX() - e2.getX() < -150) {
draw(drawAction.draw_v);
present_status.setText("直线");
}
return true;
}
//判断绘图
@Override
protected void onResume() {
super.onResume();
}
enum drawAction {
draw_h, draw_v, clear,
}
void draw(drawAction action) {
try {
// 锁定
canvas = surfaceHolder.lockCanvas(null);
synchronized (surfaceHolder) {
//做不同的绘图
switch (action) {
case draw_h:
draw_H(canvas);
break;
case draw_v:
draw_V(canvas);
break;
case clear:
clear(canvas);
break;
}
}
} finally {
if (canvas != null) {
surfaceHolder.unlockCanvasAndPost(canvas);
}
}
}
//画水平线
void draw_H(Canvas canvas) {
Paint p = new Paint();
p.setARGB(500, 0, 255, 0);
canvas.drawLine(50,100,400,100, p);
}
//画垂直线
void draw_V(Canvas canvas) {
Paint p = new Paint();
p.setARGB(500, 0, 255, 0);
canvas.drawLine(100,50,100,400, p);
}
//清除
void clear(Canvas canvas) {
Paint p = new Paint();
p.setARGB(255, 0, 0, 0);
Rect rect = new Rect(0, 0, SurfaceView01.getWidth(),
SurfaceView01.getHeight());
canvas.drawRect(rect, p);
}
先谢谢各位大大帮忙了
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 163.18.104.12
1F:推 bukiya:画线前call canvas.drawColor(0xff000000) 清空画面 08/03 17:56
2F:→ MattBonner:非常感谢!!!! 08/03 23:38