gpt4 book ai didi

java - Android 中的 AppWidget 动画

转载 作者:行者123 更新时间:2023-12-01 15:35:23 27 4
gpt4 key购买 nike

我创建了一个 WiFi 小部件,让用户可以轻松访问 WiFi。小部件功能运行良好。现在我想向小部件显示动画。连接时信号条周期性亮起一次并向上上升,直至 WiFi 启用。为此,我创建了一个具有不同信号级别的图像阵列。

当连接时,我正在调用方法startAnimation。

public void StartAnimation()
{
System.out.println("start");
frame = 0;
animationFlag = true;
if(!handler.hasMessages(0))
handler.postDelayed(AnimateRunnable, FRAME_RATE);



}

从 satrtAnimation 中,我将animationFlag 设置为 true。

之后状态变为Enbaled或Notconnected,此时我正在调用stopAnimation方法。

public void StopAnimation()
{
System.out.println("Stop Animation Before:"+animationFlag);
animationFlag = false;
System.out.println("Stop Animation:After:"+animationFlag);
if(!handler.hasMessages(0)) {
System.out.println("handler.hasmessage0");
handler.removeCallbacks(AnimateRunnable);
}


}

这里我将animationFlag设为假。并打印前后的值。它显示正确。

但在“我的可运行”中动画标志仍然为真。所以我的小部件被挂起

final Runnable AnimateRunnable =new Runnable(){
public void run()
{
System.out.println("run:"+animationFlag);
if(animationFlag)
{
System.out.println("Animation Flag:"+animationFlag);
AppWidgetManager ap =AppWidgetManager.getInstance(mContext);
frame = ++frame%5;
remoteViews.setImageViewResource(R.id.wifi_signal_strength,rangeImages[frame]);
ap.updateAppWidget(thisWidget, remoteViews);

handler.postDelayed(AnimateRunnable, FRAME_RATE);



}
}
};

最佳答案

尽管应用程序小部件布局是在您的应用程序中定义的,但它不是您的 View ,您无法直接操作它。也不允许所有 View 都出现在应用程序小部件布局中。这个 View 由启动器管理,布局通过晦涩的方法传递给它(我们不能在这里讨论)

当您想更改应用程序小部件内容时,您必须通过管理器和远程 View 对象来完成:

   private static void updateWidgetState(Context context, CharSequence amountCameras, String locationCity, String locationStatus) {
AppWidgetManager manager = AppWidgetManager.getInstance(context);
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.camera_widget_layout);
views.setOnClickPendingIntent(R.id.camerawidget, PendingIntent.getActivity(context, 0, new Intent(context, CameraWatch.class), PendingIntent.FLAG_UPDATE_CURRENT));
views.setTextViewText(R.id.widget_amount_cameras, amountCameras);
views.setTextViewText(R.id.widget_location, locationCity);
// views.setTextViewText(R.id.widget_security, securityStatus);
views.setTextViewText(R.id.locationStatus, locationStatus);

final int[] appWidgetIds = manager.getAppWidgetIds(new ComponentName(CameraWidgetProvider.class.getPackage().getName(), CameraWidgetProvider.class.getName()));

manager.updateAppWidget(appWidgetIds, views);

Log.d(LOG_TAG, "widget state changed");
}

请参阅有关 RemoteViews 的文档 - 这是您可以获得的所有功能。无动画

关于java - Android 中的 AppWidget 动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8937661/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com