14

カスタムの読み込み進行状況ダイアログを作成しました。そして、それはうまく機能しています。

私は12個の正方形の画像を回転させています ここにある画像はそのうちの1つです

ここに画像の説明を入力

しかし、AsynTask で使用したい場合、アニメーションが動作しません。

私のサンプルコードは以下です。

読み込みを開始するアクティビティ... アニメーションと停止。

MainActivity.java

public class MainActivity extends Activity {
    AnimationDrawable loadingViewAnim;
    TextView loadigText;
    ImageView loadigIcon;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        loadigText = (TextView) findViewById(R.id.textView1);
        loadigText.setText("Loading...");
        loadigText.setVisibility(View.GONE);

        loadigIcon = (ImageView) findViewById(R.id.imageView1);
        loadigIcon.setVisibility(View.GONE);

        loadigIcon.setBackgroundResource(R.anim.progress_animation_white);
        loadingViewAnim = (AnimationDrawable) loadigIcon.getBackground();


    }

    //When User Touch on Screen The Loading... Animation Starts With Image Rotation

    //If I start below code in AsynTask's onPreExecute method it doesn't work
    public boolean onTouchEvent(MotionEvent event)
      {
        loadigText.setVisibility(View.VISIBLE);
        loadigIcon.setVisibility(View.VISIBLE);

          if (event.getAction() == MotionEvent.ACTION_DOWN)
          {
             loadingViewAnim.start();
             return true;
          }
         return super.onTouchEvent(event);
      }
}

進捗ダイアログ用のシンプルなテキストと画像を使用した XML レイアウト。

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#000000"
    android:gravity="center"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/progress_sm_w01" />

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:text="Loading..."
        android:textColor="#ffffff"
        android:textSize="12sp" />

</LinearLayout>

角度と時間で回転している12枚の画像を含むアニメーションリスト

progress_animation_white.xml

<animation-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/progress_sm_w01" android:duration="50" />
    <item android:drawable="@drawable/progress_sm_w02" android:duration="50" />
    <item android:drawable="@drawable/progress_sm_w03" android:duration="50" />
    <item android:drawable="@drawable/progress_sm_w04" android:duration="50" />
    <item android:drawable="@drawable/progress_sm_w05" android:duration="50" />
    <item android:drawable="@drawable/progress_sm_w06" android:duration="50" />
    <item android:drawable="@drawable/progress_sm_w07" android:duration="50" />
    <item android:drawable="@drawable/progress_sm_w08" android:duration="50" />
    <item android:drawable="@drawable/progress_sm_w09" android:duration="50" />
    <item android:drawable="@drawable/progress_sm_w10" android:duration="50" />
    <item android:drawable="@drawable/progress_sm_w11" android:duration="50" />
    <item android:drawable="@drawable/progress_sm_w12" android:duration="50" />

    </animation-list>

これがロード画面の結果です..

ここに画像の説明を入力

私の質問は 、AsynTask で同じ Loading Animation を実現する方法はありますか。

あなたの小さな助けに感謝します。

4

2 に答える 2

33

@Brontok と @URAndroid の助けに感謝します。私は自分の問題を解決しました。では、私自身の質問に答えさせてください。カスタム ローディング アニメーションを実現しました。

画像回転アニメーション用の画像をいくつか追加しました

ステップ 1 - res/drawable フォルダー内

  1. progress_sm_w00.png (デフォルトの空白の透明画像)
  2. progress_sm_w01.png (最初のアニメーション位置)
  3. progress_sm_w02.png
  4. progress_sm_w03.png
  5. progress_sm_w04.png
  6. progress_sm_w05.png
  7. progress_sm_w06.png
  8. progress_sm_w07.png
  9. progress_sm_w08.png
  10. progress_sm_w09.png
  11. progress_sm_w10.png
  12. progress_sm_w11.png
  13. progress_sm_w12.png (最後のアニメーション位置)。

例 : これらの 1 つを以下に示します。

ここに画像の説明を入力

ステップ 2 - res/anim フォルダーに作成されたアニメーション ファイル名 "loading_animation.xml"

<item android:drawable="@drawable/progress_sm_w01" android:duration="50" />
<item android:drawable="@drawable/progress_sm_w02" android:duration="50" />
<item android:drawable="@drawable/progress_sm_w03" android:duration="50" />
<item android:drawable="@drawable/progress_sm_w04" android:duration="50" />
<item android:drawable="@drawable/progress_sm_w05" android:duration="50" />
<item android:drawable="@drawable/progress_sm_w06" android:duration="50" />
<item android:drawable="@drawable/progress_sm_w07" android:duration="50" />
<item android:drawable="@drawable/progress_sm_w08" android:duration="50" />
<item android:drawable="@drawable/progress_sm_w09" android:duration="50" />
<item android:drawable="@drawable/progress_sm_w10" android:duration="50" />
<item android:drawable="@drawable/progress_sm_w11" android:duration="50" />
<item android:drawable="@drawable/progress_sm_w12" android:duration="50" />

</animation-list>

ステップ 3 -ローディングを表示する必要がある場合に、画面 (アクティビティ) にカスタム ローディング ビュー レイアウトを作成しました。

例。Facebook ログイン画面の XML レイアウト

<LinearLayout
         android:id="@+id/LinearLayout1"
         android:layout_width="fill_parent"
         android:layout_height="fill_parent"
         android:background="#0D000000"
         android:gravity="center"
         android:orientation="vertical"
         android:visibility="gone" >

    <ImageView
    android:id="@+id/imageView111"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/progress_sm_w00"
    android:visibility="gone" />

    <TextView
    android:id="@+id/textView111"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="10dp"
    android:text="Searching..."
    android:textColor="#ffffff"
    android:textSize="12sp"
    android:visibility="gone" />

</LinearLayout>

ステップ 4 - Java コード (Activity) で Loading ビューを作成し、OnCreate メソッドを完了した後、非同期タスクを開始して、アニメーションが適切に機能するようにしました。

public class ResultActivity extends Activity {

      private static final String TAG = "ResultActivity";
      private AnimationDrawable loadingViewAnim=null;
      private TextView loadigText = null;
      private ImageView loadigIcon = null;
      private LinearLayout loadingLayout = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_result);

        loadingLayout = (LinearLayout)findViewById(R.id.LinearLayout1);
        loadingLayout.setVisibility(View.GONE);

        loadigText = (TextView) findViewById(R.id.textView111);
        loadigText.setVisibility(View.GONE);

        loadigIcon = (ImageView) findViewById(R.id.imageView111);
        loadigIcon.setVisibility(View.GONE);

        loadigIcon.setBackgroundResource(R.anim.loading_animation);
        loadingViewAnim = (AnimationDrawable) loadigIcon.getBackground();

        // This line is to start Asyn Task only when OnCreate Method get completed, So Loading Icon Rotation Animation work properly
        loadigIcon.post(new Starter());

    }

    class Starter implements Runnable {
          public void run() {
            //start Asyn Task here   
            new LongOperation().execute("");
          }
      }

    private class LongOperation extends AsyncTask<String, Void, String> {

        @Override
        protected String doInBackground(String... params) {
            //ToDo your Network Job/Request etc. here 
            return "Executed";
        }

        @Override
        protected void onPostExecute(String result) {
        //ToDo with result you got from Task

        //Stop Loading Animation
            loadingLayout.setVisibility(View.GONE);
        loadigText.setVisibility(View.GONE);
        loadigIcon.setVisibility(View.GONE);
        loadingViewAnim.stop();
        }

        @Override
        protected void onPreExecute() {
        //Start  Loading Animation
        loadingLayout.setVisibility(View.VISIBLE);
        loadigText.setVisibility(View.VISIBLE);
        loadigIcon.setVisibility(View.VISIBLE);
        loadingViewAnim.start();
        }

        @Override
        protected void onProgressUpdate(Void... values) {}
    }
}

ステップ 5 -これは、進行中のロード アニメーションを含む結果画面です。

ここに画像の説明を入力

これがあなたを助けることを願っています。乾杯!!

于 2013-11-15T09:31:32.360 に答える