最近做项目是碰到这样一个需求,点击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);
}
注意:如果想要实现复杂的动画,这种方法是行不通的。