Android: экран запуска виджета: нарисуйте значок загрузки (например, круговую полосу), например Fancy Widget - PullRequest
0 голосов
/ 04 июня 2011

Я ищу способ нарисовать значок загрузки (например, круговую полосу) во время запуска моего виджета.По умолчанию я использую исходный макет, описанный в файле ресурсов xml appwidget-provider: (android: initialLayout xml element)

<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="294dp"
android:minHeight="144dp"
android:initialLayout="@layout/widget_message"
android:configure="fr.cdcorp.homewidget.configurationActivity.WDWidgetConfiguration"
android:updatePeriodMillis="43200000" 
/>

Итак, в этом исходном макете (widget_message.xml) я использую ImageViewwhich src является анимированной панелью GIF.Но это не работает, я просто вижу 1-й кадр GIF, а не анимированный GIF.AFAIK это может быть сделано, Fancy Widget это делает.Любая помощь будет признательна!Спасибо, CD

1 Ответ

0 голосов
/ 18 октября 2011

попробуйте это, у меня это сработало .. Я использую действие, запущенное по щелчку appWidge, но оно должно работать и для вашей конфигурации)

    final class GIFView extends View {

        Movie movie, movie1;
        InputStream is = null, is1 = null;
        long moviestart;


        public GIFView(Context context) {
            super(context);

            is = context.getResources().openRawResource(R.drawable.youranimatedgif);
            movie = Movie.decodeStream(is);


        }

        @Override
        protected void onDraw(Canvas canvas) {

            super.onDraw(canvas);

            try{
            long now = android.os.SystemClock.uptimeMillis();

            if (moviestart == 0) { // first time
                moviestart = now;

            }

            int relTime = (int) ((now - moviestart) % movie.duration());
            System.out.println("time=" + relTime + "\treltime=" + movie.duration());
            movie.setTime(relTime);

                //this will draw on the top left corner of your display
                movie.draw(canvas, 0,0);



            this.invalidate();
            }
            catch (Exception e) {
                     //make you stuff here
            }
        }
    }




public class YuorActivity extends Activity {    

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        try{        

        setContentView(new GIFView(this));
        new InitTask().execute(this);

        }
        catch (Exception e) {
                //do your stuff here
        }

    }

}

надеюсь, что это поможет ...

...