如何通过短暂中断多次更改appwidget(remoteview)的imageview?

时间:2015-11-26 00:14:17

标签: android animation imageview android-appwidget remoteview

我是Android开发的新手,我遇到了问题。 我希望你们能帮助我;) 我正在使用Appwidget,一个带有线性布局的远程视图 包含多个图像视图。 我自己完成了一些教程和示例 我能够构建第一个应用程序,它可以检测单击的imageview以打开特定的已安装应用程序,或者更改某些Imageview的图像资源。

现在我的问题是我想在点击按钮时为图像添加动画效果。 我做了一个drawableAnimation,但后来我读到远程视图不支持这些。

所以我的想法是手动更改图片,稍作休息 例如:

更改imageview

0.1秒等待

更改imageview

0.1秒等待

更改imageview

0.1秒等待

更改imageview

所以现在我读了一些关于Sleep(),处理程序和adapterviewflipper(我没能实现),我真的不知道该走的路。

以下是我的Appwidgetprovider的代码

public class MyWidgetProvider extends AppWidgetProvider {

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
        int[] appWidgetIds) {

    RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_demo);

    // Button To Change Imageview
    remoteViews.setOnClickPendingIntent(R.id.B1, buildButtonPendingIntent(context));
    //Buttons to open some installed apps
    remoteViews.setOnClickPendingIntent(R.id.T1, getPendingIntent(context, 1));
    remoteViews.setOnClickPendingIntent(R.id.T2, getPendingIntent(context, 2));

    pushWidgetUpdate(context, remoteViews);
}




public static PendingIntent buildButtonPendingIntent(Context context) {
    Intent intent = new Intent();
    intent.setAction("com.appwidgettest.intent.action.UPDATEUI");
    return PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
}


public static PendingIntent getPendingIntent(Context context, int btnId) {

// starts a htc radio app as standart and if button 2 is clicked it starts
// chrome browser just did this for testing the packagemanager
    PackageManager pm = context.getPackageManager();
    String gg = "com.htc.fm";
    if (btnId==2){gg = "com.android.chrome";
    }

    Intent intentt= pm.getLaunchIntentForPackage(gg);
    PendingIntent pi = PendingIntent.getActivity(context, 0, intentt, 0);

    return pi;
}



public static void pushWidgetUpdate(Context context, RemoteViews remoteViews) {
    ComponentName myWidget = new ComponentName(context, MyWidgetProvider.class);
    AppWidgetManager manager = AppWidgetManager.getInstance(context);
    manager.updateAppWidget(myWidget, remoteViews);     
}

}

和到目前为止工作的Broadcastreciever。

public class MyWidgetIntentReceiver extends BroadcastReceiver {




@Override
public void onReceive(Context context, Intent intent) {
    if(intent.getAction().equals("com.appwidgettest.intent.action.UPDATEUI")){
        updateWidgetPictureAndButtonListener(context);
    }
}

private void updateWidgetPictureAndButtonListener(Context context) {
    final RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_demo);


    // Here i Change The Imageviews!
    remoteViews.setImageViewResource(R.id.M3, R.drawable.image1);
    //here i need a short time sleep of 0.2 seconds for example
    remoteViews.setImageViewResource(R.id.M2, R.drawable.image2);
    //here too
    remoteViews.setImageViewResource(R.id.M1, R.drawable.image3);





    // Here to set the Button Listeners
    remoteViews.setOnClickPendingIntent(R.id.B1, MyWidgetProvider.buildButtonPendingIntent(context));
    remoteViews.setOnClickPendingIntent(R.id.T2, MyWidgetProvider.getPendingIntent(context,2));
    remoteViews.setOnClickPendingIntent(R.id.T1, MyWidgetProvider.getPendingIntent(context,1));


    MyWidgetProvider.pushWidgetUpdate(context.getApplicationContext(), remoteViews);
}

}

我真的很抱歉我的英语不好^^我希望你能理解其中的大部分内容:P

如果您对标题有更好的了解请告诉我

请帮帮我!!

关注T.R.Salvatore

1 个答案:

答案 0 :(得分:1)

如果您在单击按钮时查找精灵动画,请参阅此示例https://code.google.com/p/mario-coin-block/。它会使一系列图像像精灵动画一样显示。

如果您只想播放幻灯片,请使用AdapterViewFlipper。我创建了一个类似的应用小部件:https://github.com/mridang/appwidget-ilmaana