ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Android 学习动画 — SurfaceView动画【II】

2019-07-20 19:38:46  阅读:192  来源: 互联网

标签:动画 snail int void private II SurfaceHolder Android public


效果图:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

慢慢的绘制出来,从左往右一帧一帧的绘制而成

新建一个 class,SurfaceViewAnim.java:

public class SurfaceViewAnim extends SurfaceView implements SurfaceHolder.Callback,Runnable {
    private SurfaceHolder mHolder;  //  声明SurfaceHolder
    private Canvas mCanvas;
    private boolean isDrawing;  //控制绘图线程
    private Paint paint;        //  画笔对象
    private Bitmap snail;   //  实现动画的图片对象
    private int snail_X;        //  动画元素的起始X坐标

    public SurfaceViewAnim(Context context) {
        super(context);
        snail = BitmapFactory.decodeResource(getResources(),R.drawable.ic_one);

        //  为了得到屏幕的宽度
        DisplayMetrics dm2 = getResources().getDisplayMetrics();
        int width = dm2.widthPixels;

        snail_X = width;    //  起始 X 坐标赋值为当前屏幕宽度值,即屏幕最右边
        paint = new Paint();
        mHolder = this.getHolder(); //  获取SurfaceHolder 对象
        mHolder.addCallback(this);  //  添加 Callback 接口
        
    }

    @Override
    public void surfaceCreated(SurfaceHolder holder) {
        isDrawing = true;
        new Thread(this).start();   //  启动绘图的线程
    }

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {

    }

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
        isDrawing = false;  //  终止绘图线程
    }

    public void run(){
        while (isDrawing){
            snail_X--;      //  绘图元素属性修改,此处为修改其 X 坐标
            if (snail_X <= 0){  //  到达最左边后,不再移动
                snail_X = 0;
            }
            mydraw();       //  绘图
            try {
                Thread.sleep(30);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    private void mydraw() {
        try {
            mCanvas = mHolder.lockCanvas();     // 锁定面板,开始绘图
            paint.setColor(Color.WHITE);
            mCanvas.drawRect(0,0,getWidth(),getHeight(),paint); //  绘制背景
            mCanvas.drawBitmap(snail,snail_X,100,paint);    //  绘图
        }catch (Exception e){

        }
        finally {
           if ( mCanvas != null){
               mHolder.unlockCanvasAndPost(mCanvas);    //  解锁花瓣,推送到界面
           }
        }
    }
}

MainActivity.java

public class MainActivity extends AppCompatActivity {
    SurfaceViewAnim anim;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        anim = new SurfaceViewAnim(this);
        setContentView(anim);   //  设置 anim 为显示视图
    }
}

activity_main.xml,不变

点击运行即可

标签:动画,snail,int,void,private,II,SurfaceHolder,Android,public
来源: https://blog.csdn.net/qq_27494201/article/details/96618579

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有