カスタムの読み込み進捗ダイアログを作成しました。そして、それはうまくいきます。
私は12個の正方形の画像を回転させています
しかし、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を使用して
あなたの小さな助けに感謝します。
@Brontokと@URAndroidの協力に感謝します。私は私の問題を解決しました。だから私は自分の質問に答えましょう、Hoeはそのカスタムローディングアニメーションを達成しました
画像回転アニメーション用の画像をいくつか追加しました
ステップ1- res/drawableフォルダー
例:これらの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コード(アクティビティ)ロードビューを作成し、OnCreateメソッドの完了後にAsynタスクを開始して、アニメーションが適切に機能するようにしました。
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-これは、進行状況のロードアニメーションを含む結果画面です。
これがお役に立てば幸いです。乾杯!!
多分あなたは [〜#〜] glide [〜#〜] を使うことができます、例えば
Glide.with(context)
.load(imageUrl)
.asGif()
.placeholder(R.drawable.loading2)
.crossFade()
.into(imageView);