2014-05-10 4 views
2

나는 이미지의 간단한 슬라이드 쇼를 보여주는 간단한 홈 화면 위젯을 만들고 있습니다. 이미지를 전환 할 때마다 간단히 다음 이미지를 1.5 초씩 표시하는 AdapterViewFlipper을 사용하고 있습니다. 이것은 잘 작동하지만 한 이미지에서 다른 이미지로 전환하는 동안 페이드 아웃 및 페이드 인 (거의 전환 애니메이션과 유사)처럼 보이며 비활성화하려고합니다. 그렇게하려면 어떻게해야합니까? 레이아웃 XML에서 애니메이션을 비활성화했지만 도움이되지 않습니다. 당황 스럽다.AppWidget에서 AdapterViewAdapter를 사용하면 왜 깜박입니까?

여기 플리퍼를 포함하는 내 레이아웃입니다 :

<?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; 
    } 

    ... 
    ... 
    ... 
} 

아시다시피 어댑터에는 특별한 것이 없습니다. 디스크에서 이미지를 읽고 레이아웃으로 설정하는 것입니다. AdapterViewFlipper

답변

3

나는 또한 동일한 문제가있어 우연히 솔루션을 발견했습니다. 이것은 까다로운 해결책과 같습니다. 이것은 실제로 애니메이션 설정이없는 애니메이션을 추가하여 애니메이션 효과를 비활성화합니다.

1. anim 폴더 아래에 두 개의 XML을 추가하십시오. 나는 in.xmlout.xml이라고 말할 것입니다. 그러나 둘 중 하나를 사용하거나 하나의 XML을 사용할 수 있습니다.

2.Add XMLS에 빈 objectAnimator 요소는

<?xml version="1.0" encoding="UTF-8"?> 
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"/> 
마술의
  • 당신이 응용 프로그램을 빌드 AdapterViewFlipper

  • android:inAnimation="@anim/in"android:outAnimation="@anim/out" 추가

      과 애니메이션이 비활성화됩니다!

  • +0

    감사합니다. 곧 그 현상금을 얻을 수 있습니다. 이것은 내가 만난 가장 까다로운 일 중 하나였습니다. –

    +0

    알았어. 감사! – juniano

    관련 문제