Android 绘制一个Loading动画__向图片中缓慢填充颜色,从而形成动画效果
2014-11-21 18:35
267 查看
Android 绘制一个Loading动画__向图片中缓慢填充颜色,从而形成动画效果
需求:制作一个加载动画,向一个不规则图片图形中从从下到上依次填充颜色,形成动画效果。效果如下:
代码如下:
LoadingAnimatorView.java
package cn.yw.lib.animation; import cn.yw.lib.R; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.view.SurfaceHolder; import android.view.SurfaceView; public class LoadingAnimatorView extends SurfaceView implements SurfaceHolder.Callback, Runnable { private SurfaceHolder holder; private Bitmap bitmap; private Paint paint1; private Paint paint2; public boolean flag = true; private int y = 100; public LoadingAnimatorView(Context context) { super(context); this.setFocusable(true); this.setFocusableInTouchMode(true); holder = this.getHolder(); holder.addCallback(this); paint1 = new Paint(); paint1.setColor(Color.RED); paint2 = new Paint(); paint2.setColor(Color.GRAY); Bitmap bitmap1 = BitmapFactory.decodeStream(context.getResources() .openRawResource(R.drawable.ic_launcher)); bitmap = bitmap1.extractAlpha();// 获取一个透明图片 y = bitmap.getWidth();//初始化y轴坐标 } //改变裁剪区域 private void playAnimator() { if (y > 0) { y-=3; } } private void drawLoadingAnimator() { Canvas canvas = null; try { canvas = holder.lockCanvas(); if(canvas != null){ canvas.drawBitmap(bitmap, 100, 100,null); canvas.drawColor(Color.GREEN); canvas.drawBitmap(bitmap, 100, 100, paint2); canvas.save(); //裁剪 canvas.clipRect(100, y+100, bitmap.getWidth()+100, bitmap.getHeight()+100); canvas.drawBitmap(bitmap, 100, 100, paint1); canvas.restore(); } /* * Rect src = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); * Rect dst = new Rect(100, 100, bitmap.getWidth()+100, y+100); * canvas.drawBitmap(bitmap, src, dst, paint2); */ } catch (Exception e) { e.printStackTrace(); } finally { try{ if (holder != null) { holder.unlockCanvasAndPost(canvas); } }catch(Exception e){ e.printStackTrace(); } } } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Override public void surfaceCreated(SurfaceHolder holder) { new Thread(this).start();//开启绘制线程 } @Override public void surfaceDestroyed(SurfaceHolder holder) { } //绘制动画线程 @Override public void run() { while (flag) { drawLoadingAnimator(); playAnimator(); try { Thread.sleep(200); } catch (Exception e) { e.printStackTrace(); } } } }
LoadingAnimatorActivity.java
package cn.yw.lib.animation; import android.annotation.SuppressLint; import android.app.Activity; import android.os.Bundle; @SuppressLint("NewApi") public class LoadingAnimatorActivity extends Activity{ private LoadingAnimatorView view; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); view = new LoadingAnimatorView(this); setContentView(view); } @Override public void onBackPressed() { view.flag = false;//结束绘制线程 super.onBackPressed(); } }
相关文章推荐
- Android 绘制一个Loading动画__向图片中缓慢填充颜色,从而形成动画效果
- Android播放多张图片形成一个动画效果
- android怎样播放多张图片形成一个动画
- android软件启动:多张背景图片形成动画效果启动
- 通过Canvas的叠加实现Android中环形View的颜色填充动画效果
- Android怎样播放多张图片形成一个动画
- android 给LinearLayout中添加一定数量的控件,并让着一定数量的控件从右到左移动,每隔若干秒停顿一下,最后一个view链接第一个view,然后继续移动循环往复,形成一个死循环简单动画效果
- Android通过播放多张图片形成一个动画 分类: Android 2015-04-24 14:05 16人阅读 评论(0) 收藏
- Android播放多张图片形成的一个动画示例
- 通过Canvas的叠加实现Android中环形View的颜色填充动画效果
- Android通过播放多张图片形成一个动画
- Android怎样播放多张图片形成一个动画
- Android应用开发——创建一个带动画效果的View
- 剖析Android动画(图片闪烁、左右摇摆、上下晃动等效果)
- Android动画(图片闪烁、左右摇摆、上下晃动等效果)
- jquery动画 -- 2.元素坐标动画效果(创建一个图片走廊)
- GDI+入门(5、在GDI+中绘制带动画效果的图片)
- 一个帖子掌握android所有控件、ProgressBar 、Android 动画效果、SQLite、四大组件、Android多媒体(转
- jquery动画 -- 3.创建一个带遮罩效果的图片走廊
- Android的一段常用动画效果代码(如何让点击的图片控件加速飞入到指定位置)