2012-01-20 55 views
0

我創建了一個WiFi小部件,可以讓用戶輕鬆訪問WiFi。 小部件功能工作正常。 現在我想向小部件展示一個動畫。在連接信號條時,請定期點亮一次,然後向上,直到啓用WiFi。 爲此,我創建了一個具有不同信號級別的圖像陣列。Android中的AppWidget動畫

雖然連接我打電話給一個方法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或Not connected那時我正在調用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爲false。並在其前後打印其值。它正確顯示。

但在My Runnable動畫標誌保持爲真。所以,我的小工具越來越吊死

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); 



     } 
    } 
}; 

回答

0

儘管應用插件佈局應用程序中定義的事實,這是不是你的看法,你不能直接操縱它。所有視圖都不允許在應用部件佈局中。這種觀點得到了發射管理和佈局通過模糊的方法(這是我們無法在這裏討論)

當你想改變你的應用程序插件內容,你必須通過管理和遠程視圖做到這一點傳遞給它的對象:

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的文檔 - 這是關於您可以獲得的所有功能。沒有動畫