我的Android应用程序由RelativeLayout组成,其中当用户点击屏幕时动态创建位图。每个位图的位置每40毫秒改变几个像素,并且在更新位图的位置之后调用postInvalidate()以重绘布局。执行此操作的代码部分位于:
ScheduledExecutorService executor = Executors
.newScheduledThreadPool(1);
// mMoverFuture is a ScheduledFuture<?> and mFrame is the RelativeLayout
mMoverFuture = executor.scheduleWithFixedDelay(new Runnable() {
@Override
public void run() {
mXPosition = mXPosition + 3;
mYPosition = mYPosition + 3;
mFrame.postInvalidate();
}
}, 0, 40, TimeUnit.MILLISECONDS);
此应用程序在Eclipse中的模拟器上完美运行。但是,当我尝试在我的设备上安装它时,位图仅被绘制而不会移动。我在带有Android 4.4.2的Karbonn A12手机以及带有4.2.2的三星Galaxy S Duos上试用了这个应用程序,两者都有相同的结果。
对此的任何帮助都非常感谢!
更新:我已将应用程序上传到Google云端硬盘,因此如果您可以在自己的设备上进行测试,那将会有很大帮助。链接位于:https://drive.google.com/file/d/0B_ixhpMVEWF5QlM0MUx2eUNYdVk/view?usp=sharing
答案 0 :(得分:0)
也许它不是答案,但你应该使用TranslateAnimation,它真的更有效,并在API 11中呈现,你正在开发&gt; = 14,因为我看到(对于3.0之前的版本,你可以使用NineOldAndroids)
int nFactor=100;
TranslateAnimation animation = new TranslateAnimation(0, 3*nFactor, 0, 3*nFactor);
animation.setDuration(1000); // 1 sec. default is 0 ms, so fast...
animation.setFillAfter(true); //stays in place after animation
createdImageView.startAnimation(animation);
如果您真的想以自己的方式使用
Handler h = new Handler();
Runnable r = new Runnable(){
public void run() {
//your stuff
h.postDelayed(r, 40);
}
};
h.postDelayed(r, 40);
用于暂停/取消
h.removeCallbacks(r);
或者所有(如果你有一个处理程序的回调很少
h.removeCallbacksAndMessages(null);