Как установить ImageView для отображения другой позиции в PNG? (Анимированные анимации для Android)

У меня есть следующий png: введите описание изображения здесь

Каждый значок равен 100X100 px. Всего 800X100 px.

У меня есть следующий ImageView xml:

                <ImageView
                android:id="@+id/CycleStageImage"
                android:layout_width="100dp"
                android:layout_height="100dp">

Я хотел бы установить CycleStageImage для отображения другого значка (100 100) по интервалу таймера 1 секунды назад и вперед.

У меня возникла проблема с созданием кода, который перемещается по оси этого PNG. Я пробовал следующие ссылки из нескольких ссылок на SOF, но не повезло:

         //first try - not working
        //Resources res = mainActivity.ApplicationContext.Resources;
        //Bitmap bitmap = BitmapFactory.DecodeResource(res, Resource.Id.CycleImage);
        //BitmapDrawable bitmapDrawable = new BitmapDrawable(Resources.System, bitmap);
        //ClipDrawable clipDrawable = new ClipDrawable(bitmapDrawable, GravityFlags.Center, ClipDrawable.Horizontal);
        //clipDrawable.SetBounds(100, 100, 100, 100);
        //clipDrawable.SetLevel(100);
        //imageView.SetImageResource(Android.Resource.Color.Transparent);
        //imageView.SetImageDrawable(clipDrawable);


        //second try - shows only part of the left top corner
        //double TUNNING = 0.5; //0.5 cut in half
        //Bitmap srcBmp = BitmapFactory.DecodeResource(Resources.System, cycleStage);
        //Bitmap modBmp = Bitmap.CreateBitmap(
        //    srcBmp,
        //    0,
        //    srcBmp.Height, // TUNNING
        //    srcBmp.Height,
        //    srcBmp.Height
        //    );

        //third try - same as the second try.        
        //int START_X = 0;
        //int START_Y = 100;
        //int WIDTH_PX = 100;
        //int HEIGHT_PX = 100;
        //// Crop bitmap 
        //Bitmap newBitmap = Bitmap.CreateBitmap(SOURCE_BITMAP, START_X, START_Y, WIDTH_PX, HEIGHT_PX, null, false);

        //// Assign new bitmap to ImageView 
        //imageView.SetImageBitmap(newBitmap);

Я следил за учебником Android: https://developer.android.com/guide/topics/resources/drawable-resource.html#Clip

но не повезло.. Было бы также полезно помочь с таймером, а также с png.

Спасибо!

Ответ 1

Наконец, я получил его для работы, выполнив следующие шаги: (Хотя я признаю его немного хромым...)

  • Я разделил вышеуказанный PNG на 8 (100x100) PNG каждый с помощью онлайн-инструмента → PNG Splitter
  • Я создал GIF с помощью онлайн-инструмента - GIF Maker → http://gifmaker.me/
  • Я поместил сохраненный gif в папку "Assets" и изменил его свойства → действие сборки на "AndroidAsset"
  • Я создал WebView и разместил его на своем XML-экране. это выглядит так:

                <WebView
                xmlns:android="http://schemas.android.com/apk/res/android"
                 android:id="@+id/MyWebView"
                 android:layout_width="100dp"
                 android:layout_height="100dp"/>
    
  • В моей работе я сгенерировал код следующим образом:

    WebView myWebView = (WebView)findViewById(Resource.Id.MyWebView);
    myWebView.loadUrl("file:///android_asset/Gif.gif");
    

Он работает как шарм!

Я надеюсь, что он будет помощником любого, кто хочет выполнить запуск GIF внутри приложения для Android.

Удачи.