在一些需求中,需要在程序运行时动画自动启动,我们也知道在android提供的Tween Animation和frame animation。但是当使用frame animation时候,启动Frame Animation动画的代码anim.start();不能在OnCreate()中,因为在OnCreate()中AnimationDrawable还没有完全的与ImageView绑定,在OnCreate()中启动动画,就只能看到第一张图片。现在问题是如何才能让程序启动时自动的启动动画?可以试一下在onStart方法中,但是结果同样不能如我们所愿。这样不行,继续尝试,使用Handler试一下!代码如下:
private Runnable runnable= new Runnable() { public void run() { frameAnimation.start(); } }; Handler handler= new Handler(); //在onCreate方法中: handler.post(runnable);
handler对象将通过post方法,将里面的Runnable对象放到UI执行队列中,UI消费这个队列,调用Runnable的run方法。这里并不生成新的线程,此时的 Runnable 是运行在UI所在的主线程中。但是这种方法也是不行!
下面即是总结的三种自动启动frame animation的方法:
首先使用AsyncTask:Handler和AsyncTask,都是为了不阻塞主线程(UI线程),且UI的更新只能在主线程中完成,因此异步处理是不可避免的。AsyncTask使创建需要与用户界面交互的长时间运行的任务变得更简单。不需要借助线程和Handler即可实现。对于AsyncTask这里就不多说了,也就是用到一点。
imageV.setBackgroundResource(R.anim.myframeanimation); frameAnim = (AnimationDrawable) imageV.getBackground(); ?class RunAnim extends AsyncTask<String, String, String>{ @Override protected String doInBackground(String... params) { if(!frameAnim.isRunning()){ frameAnim.stop(); frameAnim.start(); } return ""; } } //onCreate方法中执行 RunAnim runAnim=new RunAnim(); runAnim.execute("");
这样就能在是程序自动执行frame animation了。
其次使用View.post(Runnable)的方式:
imageV.post(new Runnable(){ @Override public void run() { frameAnim.start(); } });
文档:boolean android.view.View .post(Runnable action)
Causes the Runnable to be added to the message queue. The runnable will be run on the user interface thread.即可把你的Runnable对象增加到UI线程中运行。
这样也能正常启动frame Animation。
第三就是使用ViewTreeObserver.OnPreDrawListener listener:当一个视图树将要绘制时产生事件,可以添加一个其事件处理函数:onPreDraw
OnPreDrawListener opdl=new OnPreDrawListener(){ @Override public boolean onPreDraw() { animDraw.start(); return true; } }; //onCreate方法中 imageV.getViewTreeObserver().addOnPreDrawListener(opdl);
以上即是总结的三种自动启动frame animation的方法,当然,对于android线程的处理,UI更新操作实现,肯定有其他的方法。以上描述中如有错误,还望多多包含与指教!!!
相关推荐
AsyncTask.java,AsyncTask.java,AsyncTask.java,AsyncTask.java
在这个"AsyncTask.jar"文件中,我们可以看到一个使用AsyncTask来下载网络图片的示例,即`AsyncTaskTest`。 AsyncTask分为三个基本步骤:`onPreExecute()`、`doInBackground(Params...)`和`onPostExecute(Result)`。...
在Android应用开发中,异步任务(AsyncTask)是一个非常重要的组件,主要用于处理那些需要在后台线程执行但又需要与UI交互的操作。AsyncTask使开发者能够轻松地在后台线程执行耗时操作,然后在主线程更新UI,避免了...
在"Edu_AsyncTask.zip"项目中,开发者可能比较了这两种方式在加载图片时的性能、资源占用和用户体验。通过实际案例,学习者可以更好地理解和选择适合的异步处理方式。 总的来说,理解和熟练运用`AsyncTask`以及`...
首先,AsyncTask有三个泛型参数:Params、Progress和Result。Params代表启动任务时所需的输入参数,通常用于传递执行任务所需的初始数据。Progress表示任务执行过程中的进度信息,适合于展示进度条等进度反馈。...
本文将详细介绍四种常见的在Android线程中操作UI界面的方法:使用Handler、View.post(Runnable)、Activity.runOnUiThread(Runnable)以及AsyncTask。 ### 1. 使用Handler **原理**: `Handler`机制是Android中处理...
此外,还有其他几种与UI线程交互的方法,如`Activity.runOnUiThread(Runnable)`和`View.post(Runnable)`,它们都是将代码放入UI线程的消息队列,等待UI线程执行。`View.postDelayed(Runnable, long)`与`post()`类似...
在Android开发中,`Handler`、`AsyncTask`和`Looper`是三个非常重要的概念,它们主要用于处理应用程序的异步操作和线程通信。本文将深入探讨这些知识点,并通过实例来展示它们如何协同工作。 首先,`Handler`是...
总结,这个压缩包提供的资源涵盖了Android平台上拍照、录像、录屏的实现方式,以及使用AsyncTask进行后台文件上传的基本步骤。在实际开发中,开发者需要结合具体需求,对代码进行适当的修改和优化,以确保功能的稳定...
AsyncTask是Android中用于在后台线程执行耗时操作并更新UI的一种机制,它简化了在主线程和工作线程之间交互的过程。在Android中,由于UI操作必须在主线程中进行,因此需要异步处理来避免阻塞用户界面。AsyncTask就是...
- **外部存储**:Android设备通常有两种存储方式,内部存储和外部存储。录音文件通常保存在外部存储,因为它们可能需要在应用卸载后仍然存在。使用`getExternalFilesDir()`或`getExternalCacheDir()`方法可以获取...
Handler 常用来多线程之间传递消息,AsyncTask 内部实现 InternalHandler,用来发送和处理消息 MESSAGE_POST_RESULT、MESSAGE_POST_PROGRESS,对应 AsyncTask 的回调方法 onProgressUpdate 和 onPostExecute,这两个...
`AsyncTask` 类包含三个泛型类型参数,分别代表`Params`(输入参数)、`Progress`(后台执行过程中的进度)和`Result`(后台操作完成后返回的结果)。`AsyncTask` 提供了四个关键方法:`onPreExecute()`、`...
在Android开发中,`Handler`和`AsyncTask`是两种常用的方式来处理应用程序中的异步操作。它们都是为了在主线程和工作线程之间传递数据、更新UI,避免阻塞主线程,提供良好的用户体验。让我们深入了解一下这两个关键...
为了在低版本设备上保持一致的行为,你可能需要使用`AsyncTask.executeOnExecutor()`方法指定`THREAD_POOL_EXECUTOR`。 6. **限制** 由于`AsyncTask`的设计,同一时间只能有固定数量的任务执行。因此,不适合大量...
在Android开发中,异步任务(AsyncTask)是一种常见的处理耗时操作的方式,尤其是在主线程中需要执行网络请求、数据库操作或大型数据处理时。它能够避免UI线程被阻塞,提供更好的用户体验。让我们深入了解一下`...
在Android中使用AsyncTask和Handler线程间交互的方式,详情参见博客:http://www.cnblogs.com/plokmju/p/android_AsyncTask.html和http://www.cnblogs.com/plokmju/p/android_Handler.html
AsyncTask 是 Android 平台上一种轻量级的异步处理机制,主要用于在后台执行耗时操作,同时确保结果能够在主线程中安全地更新 UI。它简化了多线程编程,尤其是与用户界面交互的需求。 首先,AsyncTask 包含三个泛型...
AsyncTask是Android中用于在后台线程执行耗时操作并更新UI的一种机制。它通过封装了线程管理和与主线程的交互,简化了在UI线程中处理异步任务的流程。下面我们将深入探讨AsyncTask的使用、原理以及如何更新UI。 ...