所以我创建了一个名为“drawable view”的视图
class DrawableView extends View{
Context mContext;
int touches=0,k,Xoffs,clicks=0;
double x_1 = 0,x_2=0;
private float mLastTouchX, mLastTouchY;
public DrawableView(Context context) {
super(context);
mContext = context;
}
....
@Override
protected void onDraw(Canvas canvas){
Paint myPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
canvas.drawColor(Color.BLUE);
myPaint.setColor(Color.WHITE);
canvas.drawCircle(200, 100, 20, myPaint);
}
..... more code....
}
它只能在ondraw命令中失效!即:调用“invalidate();”在ondraw命令的末尾导致它循环。
我多次尝试调用g_draw.invalidate();或g_draw.postInvalidate(); (g_draw是创建的Drawable View的名称)来自其他类甚至主活动类,它不起作用。为什么以及如何解决它?
谢谢
答案 0 :(得分:0)
如果你想要连续的onDraw调用尝试在另一个线程中执行它。创建一个线程,并从其run方法尝试执行postInvalidate。
它总是对我有用。
另一件事是,当你画一次圆圈时,下一次不会有任何区别 - 它看起来会一样。
答案 1 :(得分:0)
您可能想在DrawableView类中的某处调用invalidate()。例如,如果您希望视图在任何触摸事件后重绘,您可以执行以下操作:
public boolean onTouchEvent( MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_UP){
invalidate();
}
}
这就是我在益智游戏中绘制可移动部件的方法。