我现在遇到一个问题,就是当执行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;
}
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;
}
解决方案 »
- android2.2 播放视频时,截取任意时间点图像且保存下来 【在线等】
- 新手提问关于读取NFC Tag的问题
- Android ExpandableListView 点击出错
- 高手,怎么还原【发短信】?
- 移植第三方库进android
- ScrollView动态加载控件问题
- Android WebView的使用
- Android 4.2.2 Make sdk 报错,新新手,大神救我
- 新手求救,关于android内容提供者
- android expandablelistview,网络数据加载。
- 求助关于NDK中LOCAL_C_INCLUDES的问题
- 安卓中contacts模块中联系人问题
发完整代码上来帮你调整。