如何使画布更顺畅

时间:2014-03-04 23:43:28

标签: android canvas

我正在使用带有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;
}

}

就像选秀一样。我不知道如何解决它。有没有其他方式可以顺利移动。有人请帮帮我!!

1 个答案:

答案 0 :(得分:0)

每20毫秒移动4个像素相当于每秒移动4个像素50次,每秒转换为200个像素。

您应该考虑以下几点:

  • 以每秒50次更新(即每20 ms)更新一次对于移动设备而言通常相当高。老实说,我会减少很多,比方说,30毫秒(或每秒33.3次更新),甚至更低一点。我记得在某个地方读到一个人在出现波动之前可以看到的最低FPS在24到26 FPS之间(如果该号码关闭,请有人纠正我。)

降低每秒更新的次数会降低图像随时间移动的距离,从而使其平滑。警告,太低(即我提到的门槛),你的游戏也会显得不稳定。

  • 我不建议只使用像素。如果您正在使用Android,那么您将使用大量不同的屏幕尺寸,这意味着4像素移动在所有设备上看起来都不一样。如果您正在开发游戏,这将导致设备之间的严重差异和游戏玩法的变化。解决方案?每个人都有他们的意见,但我的意见通常是在百分比变化的屏幕上做所有事情。

话虽如此,你可以这样做:

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

总结:

减少每秒更新的次数,可能会减少每次更新通话所需的距离,并尝试以与动态屏幕尺寸相关的方式执行所有操作。