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();    }}
复制代码

更多相关文章

  1. Android动画总结(2)属性动画
  2. Android开发UI之在子线程中更新UI
  3. Android JAVA代码执行shell命令
  4. 〖Android〗OK6410a的Android HAL层代码编写笔记
  5. Android Animation 动画解析

随机推荐

  1. 在Android设备与Mac电脑之间传输文件
  2. android与linux之间的关系
  3. 修改 framework 代码的经验和踩过的坑
  4. Android下Content Provider使用
  5. 一些摘抄
  6. Android OTA升级原理和流程分析(一)--updat
  7. Android_简单笔记一
  8. 【Android(安卓)学习笔记】save data(1)—
  9. 【Android】Broadcast控制音乐暂停继续等
  10. Android本地硬盘的API文档打开速度慢