当前位置:编程学习 > wap >>

android屏幕上绘图问题,亟待高手解决!!

我现在遇到一个问题,就是当执行OnTouchEvent()时间的move时,发现传递的点并不能全部画出来,只能画出来一个点,代码如下,亟待解决!!谢谢!!


public class MyLayout extends RelativeLayout {

private Paint paint;
private float screenW,screenH;
private float cx;
private float cy;
private int radius = 32;
private float a;
private Bitmap bitmap;
public MyLayout(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub

setWillNotDraw(false);
bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.circel);
paint = new Paint();
paint.setAntiAlias(true);
    paint.setStyle(Paint.Style.STROKE);
    paint.setStrokeWidth(2);
    paint.setColor(Color.WHITE);
}

@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
revise();               // 修正
canvas.drawBitmap(bitmap, cx, cy, paint);
Log.v("rc", "onDraw  "+bitmap);
}

@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
// TODO Auto-generated method stub
super.onLayout(changed, l, t, r, b);
screenW = r-l;
screenH = (b-t);
cx = screenW/2;
cy = screenH/2;
// Log.v("rc", "onLayout:"+cx+";"+cy);
}

private void revise() {
Log.i("rc", "cx:"+cx);
if (cx <= radius) {
cx = radius;
} else if (cx >= (screenW - 2*radius)) {
cx = screenW - 2*radius;
}  

if (cy <= radius) {
cy = radius;
} else if (cy >= (screenH - 2*radius)) {
cy = screenH - 2*radius;
}

}

@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
          
  cy = (int) event.getX();
cy = (int) event.getY();
Log.v("rc", "cx down:"+event.getX());
postInvalidate();
break;
case MotionEvent.ACTION_MOVE:

cx = (int) event.getX();
cy = (int) event.getY();
Log.v("rc", "cx:  move"+event.getX());
postInvalidate();
break;
case MotionEvent.ACTION_UP:
          
cx = (int) event.getX();
cy = (int) event.getY();
Log.v("rc", "cx up:"+event.getX());
postInvalidate();
break;
}

return true;
} --------------------编程问答-------------------- 在dispatchDraw()中画 --------------------编程问答-------------------- 你这个postInvalidate();是做啥?画点?画点你要传cx,cy过去,cx,cy随时都会变,你如果没传过去,那么画的只是最新的cx,cy座标。


发完整代码上来帮你调整。 --------------------编程问答-------------------- 从onDraw来看,只画了最新的cx,cy的点,没有对以前的点进行记录 --------------------编程问答--------------------
引用 3 楼  的回复:
从onDraw来看,只画了最新的cx,cy的点,没有对以前的点进行记录
等于说 就花了一个点。。。
补充:移动开发 ,  Android
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,