Hi, guys
I'm testing AppWidget to play animation on the homescreen.
This is my testing source using Service and RemoteViews.
I confirmed the modification of the image of layout's ImageView.
I thought it possible to implement the animation using RemoteViews or
AppWidgetHostView ...
But I failed. I didn't see any change of the image.
How to adapt the animation to RemoteViews?
I tried like this.
Some Imports
import android.appwidget.AppWidgetHostView;
...
public class TestAnimationWidget extends AppWidgetProvider {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
String action = intent.getAction();
if(AppWidgetManager.ACTION_APPWIDGET_UPDATE.equals(action)){
Bundle extras = intent.getExtras();
if (extras != null) {
int[] appWidgetIds = extras.getIntArray
(AppWidgetManager.EXTRA_APPWIDGET_IDS);
if (appWidgetIds != null && appWidgetIds.length > 0) {
this.onUpdate(context, AppWidgetManager.getInstance(context),
appWidgetIds);
}
}
}
else if(AppWidgetManager.ACTION_APPWIDGET_DELETED.equals(action)){
Bundle extras = intent.getExtras();
if (extras != null) {
int[] appWidgetIds = extras.getIntArray
(AppWidgetManager.EXTRA_APPWIDGET_IDS);
if (appWidgetIds != null && appWidgetIds.length > 0) {
this.onDeleted(context, appWidgetIds);
}
}
}
else if(AppWidgetManager.ACTION_APPWIDGET_DISABLED.equals(action)){
this.onDisabled(context);
}
else if(AppWidgetManager.ACTION_APPWIDGET_ENABLED.equals(action)){
this.onEnabled(context);
}
}
@Override
public void onUpdate(Context context, AppWidgetManager
appWidgetManager, int[ ] appWidgetIds) {
// TODO Auto-generated method stub
context.startService(new Intent
(context,UpdateServiceAnimation.class));
super.onUpdate(context, appWidgetManager, appWidgetIds);
}
public static class UpdateServiceAnimation extends Service {
private SensingMovement mSensingMove;
private AppWidgetManager mAppWidgetManager;
public AppWidgetProviderInfo mAWPInfo;
private AppWidgetHost mAppWidgetHost;
private List<AppWidgetHostView> mAppWidgetHostViewList;
public static int HOSTID = 0;
static public int count = 0;
int[] mAnim_img_IDs = new int[]{
R.drawable.gallery_photo_1, R.drawable.gallery_photo_2,
R.drawable.gallery_photo_3, R.drawable.gallery_photo_4
};
@Override
public void onCreate() {
mSensingMove = new SensingMovement(this);
mAppWidgetHost = new AppWidgetHost(this,HOSTID);
mAppWidgetManager = AppWidgetManager.getInstance(this);
mAppWidgetHostViewList = new ArrayList<AppWidgetHostView>();
int[ ] appWidgetIds = mAppWidgetManager.getAppWidgetIds(new
ComponentName(this,TestAnimationWidget.class));
for(int i = 0 ; i < appWidgetIds.length ; i++){
mAWPInfo =
mAppWidgetManager.getAppWidgetInfo(appWidgetIds[i]);
mAppWidgetHostViewList.add(i,
mAppWidgetHost.createView(this,
appWidgetIds[i], mAWPInfo));
}
// TODO Auto-generated method stub
super.onCreate();
}
@Override
public void onStart(Intent intent, int startId) {
// TODO Auto-generated method stub
ComponentName thisWidget = new ComponentName(this,
TestAnimationWidget.class);
RemoteViews updateViews = buildUpdate
(this,appWidgetIds.length);
// Push update for this widget to the home screen
mAppWidgetManager.updateAppWidget(thisWidget, updateViews);
super.onStart(intent, startId);
}
private RemoteViews buildUpdate(Context context, int widgetcount) {
// TODO Auto-generated method stub
RemoteViews views = new RemoteViews(context.getPackageName(),
R.layout.animation);
MyViewGroup parent = new MyViewGroup(context);
AnimationSet animation = setAnimationSet();
LinearLayout ll = (LinearLayout)views.apply(context, parent);
ll.findViewById(R.id.ImageView_animation).setAnimation(animation);
views.reapply(context, ll);
// When user clicks on widget,
Intent defineIntent = new Intent(Intent.ACTION_VIEW);
PendingIntent pendingIntent =
PendingIntent.getActivity(context,0 /* no requestCode */,
defineIntent, 0 /* no flags */);
views.setOnClickPendingIntent(R.id.layout_animation,
pendingIntent);
return views;
}
public AnimationSet setAnimationSet(){
AnimationSet mTestAnim = new AnimationSet(true);
// fromDegrees , toDegrees, pivotX, pivotY defined
RotateAnimation rotate = new RotateAnimation(0,360,
RotateAnimation.RELATIVE_TO_SELF, 0.5f,
RotateAnimation.RELATIVE_TO_SELF, 0.5f);
rotate.setDuration(1000);
rotate.setFillAfter(true);
// fromXscale , toXscale, fromYscale, toYscale, pivotX, pivotY
defined
ScaleAnimation scale = new ScaleAnimation(1,0, 1,0,
ScaleAnimation.RELATIVE_TO_SELF, 1.0f,
ScaleAnimation.RELATIVE_TO_SELF, 0.0f);
scale.setFillAfter(true);
scale.setStartOffset(500);
scale.setDuration(500);
// fromAlpha, toAlpha
AlphaAnimation alpha = new AlphaAnimation(1,0);
alpha.setFillAfter(true);
alpha.setDuration(500);
alpha.setStartOffset(500);
mTestAnim.addAnimation(rotate);
mTestAnim.addAnimation(scale);
mTestAnim.addAnimation(alpha);
mTestAnim.setRepeatMode(AnimationSet.RESTART);
mTestAnim.setRepeatCount(AnimationSet.INFINITE);
return mTestAnim;
}
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
}
public static class MyViewGroup extends ViewGroup{
public MyViewGroup(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b)
{
// TODO Auto-generated method stub
}
}
}
This is my major idea to implement animation.
MyViewGroup parent = new MyViewGroup(context);
AnimationSet animation = setAnimationSet();
LinearLayout ll = (LinearLayout)views.apply(context, parent);
ll.findViewById(R.id.ImageView_animation).setAnimation(animation);
views.reapply(context, ll);
What is that I think wrong?
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
-~----------~----~----~----~------~----~------~--~---