带有 AsynTask 的 Squre 图像旋转自定义进度对话框 [英] Custom Progress Dialog With Squre Image Rotation With AsynTask
问题描述
我创建了一个自定义加载进度对话框.并且运行良好.
I have created a custom Loading Progress Dialog. And its working well.
我正在旋转 12 个方形图片,这是其中之一
I am rotating 12 square Images here is one of them
但是当我想将它与 AsynTask 一起使用时,动画不起作用.
But when I want to use it with AsynTask, The animation not working.
我的示例代码如下.
我开始加载的活动...动画和停止.
Activity Where I Start Loading... Animation and Stop.
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 布局.
XML layout with Simple Text and Image for Progress Dialog.
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 个图像,我正在旋转角度 &时长
Animation List having 12 Images I am Rotating with Angle & Time Duration
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>
这是加载屏幕的结果..
Here is the result Loading Screen..
我的问题是有没有办法实现相同的加载动画使用 AsynTask.
您的小帮助将不胜感激.
Your Small Help will appreciated.
推荐答案
感谢@Brontok 和@URAndroid 的帮助.我解决了我的问题.所以让我回答我自己的问题,我实现了自定义加载动画
Well thanks to @Brontok and @URAndroid for their help. I got solved my problem. So let me answer my own question, Hoe i achieved that Custom Loading animation
我为图像旋转动画添加了一些图像
I have added few Image for Image Rotation Animation
步骤 1 - 在 res/drawable 文件夹中
Step 1 - in res/drawable folder
- progress_sm_w00.png(默认空白透明图片)
- progress_sm_w01.png(第一个动画位置)
- progress_sm_w02.png
- progress_sm_w03.png
- progress_sm_w04.png
- progress_sm_w05.png
- progress_sm_w06.png
- progress_sm_w07.png
- progress_sm_w08.png
- progress_sm_w09.png
- progress_sm_w10.png
- progress_sm_w11.png
- progress_sm_w12.png(最后一个动画位置).
示例:其中之一在下面我添加了
Example : one of these is below i have added
第 2 步 - 在 res/anim 文件夹中创建的动画文件名为loading_animation.xml"
Step 2 - in res/anim folder created animation file name "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 步 - 现在在我的屏幕(活动)中需要显示加载的任何位置创建自定义加载视图布局
Step 3 - now created Custom Loading View layout in my Screen (Activity) wherever I need to show loading
示例.我的 Facebook 登录屏幕的 XML 布局
example. XML layout for my Facebook login screen
<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 Task,以便我的动画正常工作.
Step 4 - In java code (Activity) I created Loading view and after completing OnCreate method I started Asyn Task so my Animation get work properly.
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 步 - 这是带有进度加载动画的结果屏幕.
Step 5 - Here is the Result Screen with Progress Loading animation.
希望对你有帮助.干杯!!
Hope this will help you. Cheers!!
这篇关于带有 AsynTask 的 Squre 图像旋转自定义进度对话框的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!