android 怎样在appwidget中使用动画

最近做项目是碰到这样一个需求,点击app的icon,app的icon要动起来,正常情况下这个是不可能实现的。想了半天可以通过appwidget来实现,但是查资料发现appwidget

中是不支持Animation的。这里想了一个办法,通过在线程里面不断切换图片来达到动画的效果,这样是可以实现简单动画的,这里简单说明一下是怎么实现的。

首先把图片资源放在一个数组里面。

 private int []bitmapId=new int[]{R.drawable.a, R.drawable.b, R.drawable.c,R.drawable.d, R.drawable.e, R.drawable.f, R.drawable.g, R.drawable.h };

再把Bitmap对象保存在ArrayList中

   public void initBitmap(){
        //显示动态变化过程的bitmap
        for(int i=0;i<bitmapId.length;i++){
            bmplist.add(i, BitmapFactory.decodeResource(getResources(),bitmapId[i]));
        }

    }

在线程里面不断切换图片

 private class UpdateThread extends Thread {  //动画线程
        @TargetApi(Build.VERSION_CODES.CUPCAKE)
        @Override
        public void run() {
            while (CleanAppWidgetProvider.isRunAnim) {
                Log.d(TAG, "UpdateThread");
                AppWidgetManager manager = AppWidgetManager.getInstance(UpdateService.this);
                ComponentName thisWidget = new ComponentName(UpdateService.this, CleanAppWidgetProvider.class);
                temp++;
                showClearProcess(temp);
                if(remoteViews!=null){
                    remoteViews.setImageViewBitmap(R.id.iv_anim, bmp);  //跟更新显示图片
                    manager.updateAppWidget(thisWidget, remoteViews);    //更新appwidget显示
                }else {
                    Log.d(TAG, "remoteViews 为空");
                }
                try {
                  //  Thread.sleep(5);//线程睡眠时间5ms
                } catch (Exception e) {
                   // e.printStackTrace();
                }
            }
        }
    }

public void showClearProcess(int process){
      Log.d(TAG, " process "+ process);
      bmp=(Bitmap)bmplist.get(tempNum);
       
}
注意:如果想要实现复杂的动画,这种方法是行不通的。

猜你喜欢

转载自blog.csdn.net/qq_32072451/article/details/78655585