我有一项名为MainActivity的活动
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
public class MainActivity extends Activity {
Customview cust_view;
CustomThread cust_thread;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
cust_view=new Customview(this);
setContentView(cust_view);
cust_thread= new CustomThread();
cust_thread.start();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
我通过扩展视图定义了一个名为Customview的自定义视图。在onDraw方法中,我绘制一个圆圈...更改它,sx co-ordinate..call invalidate。因此我的圆圈从屏幕的一边反弹到其他
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.view.View;
public class Customview extends View
{
Paint paint = new Paint();
float circle_x;
int mul=1;
public Customview(Context context) {
super(context);
}
public void onDraw(Canvas canvas)
{
circle_x+=2*mul;
if(circle_x==canvas.getWidth())
mul=mul*-1;
if(circle_x==0)
mul=mul*-1;
canvas.drawCircle(circle_x, 100, 400, paint);
invalidate();
}
}
我还有一个名为CustomThread的自定义线程,它通过扩展线程来实现.Inside run()是一个EMPTY while循环,它保持循环。
public class CustomThread extends Thread{
@Override
public void run() {
while(true)
{
}
}
}
现在如果我在我的主要活动中启动线程,那么在圆圈运动过程中会出现一个帧落下...它就像..移动移动......暂停一会儿......然后再移动..并重复这一点。
如果我不启动线程,它会顺利移动。
也有些奇怪:
如果我开始线程,但这一次,如果我把
Thread.sleep(0);
在我的run()方法中,它再次平滑。
发生了什么事?
我该如何解决?
答案 0 :(得分:0)
使用“invalidate();”在onDraw()对你的设备不是一个好主意,你应该用postInvalidateDelayed(20)替换;