我正在使用带有Timer的onDraw()移动绘制圆形。但它不像移动相对布局的setMargin那样平滑移动。我该如何解决? 这是我的Circle Shape代码!
public class Circle extends View{
int y =0 ;
public Circle(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
protected void onDraw(Canvas c){
super.onDraw(c);
Paint p=new Paint(Paint.ANTI_ALIAS_FLAG);
p.setColor(Color.BLUE);
c.drawCircle(100,y,10,p);
}
}
这是我的MainActivity代码!
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LinearLayout rl=new LinearLayout(this);
setContentView(rl);
rl.setBackgroundResource(R.drawable.ic_launcher);
final Circle c = new Circle(this);
rl.addView(c);
Timer t=new Timer();
TimerTask task = new TimerTask() {
@Override
public void run() {
c.y+=4;
c.postInvalidate();
}
};
t.schedule(task,0,20);
}
@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;
}
}
就像选秀一样。我不知道如何解决它。有没有其他方式可以顺利移动。有人请帮帮我!!
答案 0 :(得分:0)
每20毫秒移动4个像素相当于每秒移动4个像素50次,每秒转换为200个像素。
您应该考虑以下几点:
降低每秒更新的次数会降低图像随时间移动的距离,从而使其平滑。警告,太低(即我提到的门槛),你的游戏也会显得不稳定。
话虽如此,你可以这样做:
float speed = activity.getResources().getDisplayMetrics().heightPixels * 0.002f;
// you're obviously going to have to adjust the '0.002f' to what works
// with you and your thread's update rate per second. May also want to use
// widthPixels depending on your orientation
总结:
减少每秒更新的次数,可能会减少每次更新通话所需的距离,并尝试以与动态屏幕尺寸相关的方式执行所有操作。