2014-05-10 81 views
2

我正在創建一個簡單的主屏幕小部件,用於顯示圖像的簡單幻燈片。爲了在圖像間切換,我使用的是一個AdapterViewFlipper,它每1.5秒顯示一幅圖像。這工作正常,但在從一個圖像過渡到下一個過程中,它似乎淡出和淡入(幾乎像過渡動畫),我想禁用它。我該怎麼做?我已經禁用佈局XML中的動畫,但它沒有幫助。我很困惑。爲什麼我的AdapterViewAdapter在AppWidget中使用時會閃爍?

下面是一個包含腳蹼我的佈局:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/widget_layout" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="@drawable/widget_frame" 
    android:orientation="vertical" 
    android:textAlignment="gravity" > 

    <AdapterViewFlipper 
     android:id="@+id/image_flipper" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_below="@+id/widget_icon" 
     android:animateLayoutChanges="false" 
     android:autoStart="true" 
     android:flipInterval="1500" > 

    </AdapterViewFlipper> 

</LinearLayout> 

當appwidget,負載,我綁定腳蹼到它的適配器:

Intent ittSlides = new Intent(ctxContext, SlideService.class); 
ittSlides.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, intInstance); 
ittSlides.setData(Uri.fromParts("content", String.valueOf(new Random().nextInt()), null)); 
ittSlides.putExtra("data", strContent); 

RemoteViews remView = new RemoteViews(ctxContext.getPackageName(), R.layout.widget); 
remView.setRemoteAdapter(R.id.image_flipper, ittSlides); 

AppWidgetManager.getInstance(ctxContext).updateAppWidget(intInstance, remView); 

..和這裏是我的實際適配器的權力這一點。

public class SlideFactory implements RemoteViewsFactory { 
    private JSONArray jsoImages; 
    private final Context ctxContext; 
    private RemoteViews remView; 

    public SlideFactory(Context ctxContext, Intent ittIntent) { 

     remView = new RemoteViews(ctxContext.getPackageName(), R.layout.image); 
     this.ctxContext = ctxContext; 
     try { 
      jsoImages = new JSONArray(ittIntent.getStringExtra("data")); 
     } catch (JSONException e) { 
      throw new RuntimeException(e); 
     } 

    } 

    @Override 
    public RemoteViews getViewAt(int intPosition) { 
     try { 
      remView.setImageViewUri(R.id.dopper_image, Uri.parse(jsoImages.getString(intPosition))); 
     } catch (final JSONException e) { 
      Log.e("SlideFactory", "Unknown error encountered", e); 
      BugSenseHandler.sendException(e); 
     } catch (final Exception e) { 
      Log.e("SlideFactory", "Unknown error encountered", e); 
      BugSenseHandler.sendException(e); 
     } 
     return remView; 
    } 

    ... 
    ... 
    ... 
} 

正如你所看到的,沒有什麼特殊的適配器。我只是從磁盤讀取圖像並將其設置爲具有ImageView的佈局,然後我給出AdapterViewFlipper

回答

3

我也遇到同樣的問題,並且偶然發現瞭解決方案。這更像是棘手的解決方案。這實際上是通過添加一個沒有動畫設置的動畫來禁用動畫效果。

1.在anim文件夾下添加兩個XML。我會說in.xmlout.xml,但你可以使用任何一種或使用一種XML。

2.增加在個XML空白objectAnimator元件

<?xml version="1.0" encoding="UTF-8"?> 
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"/> 
  • 添加android:inAnimation="@anim/in"android:outAnimation="@anim/out"AdapterViewFlipper

  • 建立你的應用程序和奇蹟般地,所述動畫將被禁用!

  • +0

    謝謝。你很快就會得到這個賞金。這是我遇到的最棘手的事情之一。 –

    +0

    明白了。謝謝! – juniano

    相關問題