在模拟器上工作但不在设备上的动画

时间:2014-11-13 06:33:56

标签: android animation bitmap android-bitmap

我的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

1 个答案:

答案 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);