美文网首页
Android用自定义view实现帧动画

Android用自定义view实现帧动画

作者: NullUser | 来源:发表于2017-10-25 18:20 被阅读0次
此篇文章简单讲解下如何用自定义view将一张bitmap绘制在屏幕上
  • 将一张bitmap显示可以用ImageView的setImageBitmap(bm);这里我们为了熟悉自定义view的用法和绘制工具,以绘制bitmap为例子。

(绘制UI需了解下三个绘图工具类Paint,Canvas,Path)
1.我们创建一个Mview类继承自View

public class Mview extends View {
    private Paint mpaint;    //定义一个画笔
    private Canvas mCanvas;    //定义一个画布
    private Bitmap mBitmap;      //定义一个Bitmap
    //重写构造方法
    public Mview(Context context) {
        super(context);
        init();
    }


    public Mview(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }
    //进行初始化操作
    private void init()
    {
        mpaint=new Paint();
        mBitmap= BitmapFactory.decodeFile("/storage/emulated/0/1.webp");//得到bitmap
    }
    
   //UI绘制代码在onDraw里
    @Override
    protected void onDraw(Canvas canvas) {
       canvas.drawBitmap(mBitmap,0,0,mpaint);//调用Canvas类的drawBitmap()即可绘制bitmap。

    }
}

2.在layout中即可加入自定义的View

  • 在Activity中使用此View的方法就和使用Button,ImageView控件一样。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.you.viewdemo1.MainActivity">

    <com.example.you.viewdemo1.Mview
        android:id="@+id/mView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</LinearLayout>

3.如果我们要不断刷新UI怎么办?

  • 我们可以调用View的invalidate() ,postInvalidate() 方法,每调用一次便会执行一次onDraw()方法,以此实现UI刷新。

  • postInvalidate(); 与invalidate()方法区别就是,postInvalidate()方法可以在UI线程执行,也可以在工作线程执行
    而invalidate()只能在UI线程操作。但是从重绘速率讲:invalidate()效率高。

我们用具体实例体验下用自定义view进行UI刷新
  • 我们用7张爆炸图片来实践,在屏幕上显示爆炸的动态效果(即不断循环显示1-7的图片,速度足够快时就是连续的画面)
demo.JPG
  • 我们在前面的Mview类中加入setmBitmap()方法以改变bitmap
public void setmBitmap(Bitmap get_bitmap)
    {
        this.mBitmap=get_bitmap;
    }
  • 在Activity中我们新开一个线程用来刷新UI
new Thread(new Runnable() {
                    @Override
                    public void run() {
              //我们用一个循环不断更新bitmap并进行重绘
              //不断改变i从1到7
                        for(int i=1;i<8;i++)
                        {
                         // 每次获取对应i名字的图片并赋给bitmap
                            new_bitmap= BitmapFactory.decodeFile("/storage/emulated/0/"+i+".png");
                        //调用Mview中setmBitmap设置新得到的bitmap
                            mview.setmBitmap(new_bitmap);
                        //重绘为当前bitmap
                            mview.postInvalidate();
      
                            if(i==7)
                                i=0;
                        }
                    }
                }).start();

启动app我们便可在手机上看到连续的爆炸画面,实现了UI刷新

相关文章

  • Android开发之属性动画

    Android动画主要分为3种 View动画(Android开发之View动画) 帧动画(Android开发之帧动...

  • Android开发之帧动画

    Android动画主要分为3种 View动画(Android开发之View动画) 帧动画 属性动画 何为帧动画? ...

  • Android用自定义view实现帧动画

    此篇文章简单讲解下如何用自定义view将一张bitmap绘制在屏幕上 将一张bitmap显示可以用ImageVie...

  • 动画深入研究

    前言 分类 View动画,帧动画,自定义View动画,属性动画 View动画 平移,缩放,旋转,透明Transla...

  • Android动画三:使用 Transition 最简单方式实现

    在 android.view.animation.*包下有多种实现动画的方式,有逐帧动画、补间动画、属性动画,可以...

  • Android开发之View动画

    Android动画主要分为3种 View动画 帧动画 属性动画 何为View动画? View动画主要是对View对...

  • 笔记:Android 动画

    Android 动画 Android动画分为三种: 属性动画 帧动画 View动画 View动画支持4种效果 平移...

  • Android动画学习笔记

    Android动画分类: 1.View动画2.帧动画3.属性动画其中帧动画属于View动画中的一种。 一.View...

  • Android动画开发精要

    3个分类 View 动画, 属性动画, 帧动画 View动画(android 3.0以下使用) Translate...

  • Android动画深入分析

    Android的动画可以分为三种:View动画、帧动画和属性动画。(其实帧动画也可以算属于View动画,只是表现形...

网友评论

      本文标题:Android用自定义view实现帧动画

      本文链接:https://www.haomeiwen.com/subject/tpfcpxtx.html