图形图像处理 补间 逐帧 属性动画 SurfaceView Bitmap
来源:互联网 发布:雪地靴推荐知乎 编辑:程序博客网 时间:2024/05/10 18:52
package com.example.tyxiong.myapplication;import android.app.Activity;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.Matrix;import android.graphics.Paint;import android.graphics.drawable.BitmapDrawable;import android.graphics.drawable.Drawable;import android.os.Bundle;import android.view.View;import android.widget.ImageView;import java.util.ArrayList;import java.util.List;/* 1 用ImageView显示图片 2 用AnimationDrawable开发逐帧动画 3 用Animation开发补间动画.* Bitmap BitmapDrawable BitmapFactory 三者关系* 1 Bitmap代表一个位图对象.自己有4静态方法构建Bitmap 从源图挖生成 源图挖取并进行Matrix变换 对源位图缩放生成 生成尺寸的Bitmap* 2 BitmapDrawable包装了一个位图. 通过new包装Bitmap 其getBitmap()方法可取出其中的Bitmap* 3 BitmapFactory工具类,有方法4个从不同来源解析创建Bitmap对象.* Bitmap用后需要回收自己 2方法 isRecyled() recely()** Canvas:依附于View的画布* 大量绘制各种图形 线 点的方法+4方法进行画布坐标系(左上为0,0)变换. 其实是两个坐标系.** Paint:画布上的笔 实际上我觉得Canvas才是笔..* 11方法进行画笔设置,其中5个 笔触宽度/笔触转弯/填充风格/填充效果/路径填充效果 strokewidth strokejoin style shader pathEffect**Path 1首先创建一条路径 2用Canvas的drawPath()方法绘制出来.* 3步: 1路径* 2Paint 设置pathEffect 6子类* 3Canvas 绘制出来.** 重调组件的onDraw()方法重绘组件.UI线程中用invalidate(); 非主线程用postinvalidate()**双缓冲即: 需要实时重绘组件onDraw()且要保留先前的状态. 先绘制(用Canvas绘制路径之类的,不会盖之前)到大小相同的缓冲区,再一起绘制到组件.**使用Matrix控制变换. Bitmap有方法 创建Bitmap并应用Matrix变换* 3步: 1创建Matrix对象(也可从其他对象获取)* 2对Matrix进行变换(4种变换 位移/缩放/旋转/倾斜 translation/scale/rotate/skew)* 3把这种变换应用于指定对象.** drawBitmapMesh 扭曲图像 这是Canvas的draw方法, 即将图像分成很多小网格 事件点的小距离变换 绘制出来.** shader Paint的 方法填充效果 5子类 BitmapShader/LinearGradient/RadialGradient/SweepGradient/ComposeShader** 逐帧动画Frame 大量静态图片集中起来,依次显示* xml 根元素animation-list 1属性name 子元素item 2属性 drawable duraing* java 1创建AnimationDrawable对象 2 方法addFrame()添加一帧 默认是不播放的. start() stop() 补间动画Tween Anmation为其抽象类 4子类TranslateAnimation AlphaAnimation Scale.../Rotate.. java 设置开始帧 结束帧 持续时间 Interpolator则控制插值. 自定义补间:继承基类Animation,重写applyTransformation()属性动画:增强版的补间动画. 区别:补间动画仅对4个属性方面的变化; 属性动画能定义任何属性的变化. 补间动画仅能对UI组件执行动画;属性动画能对任何对象执行动画(不管是否显示.). 6相似:都需要指定如duraing/interpolator/repateMode/repateCount/刷新频率/组合 4API Animator ValueAnimator ObjectAnimator AnimatorSet* Animator:基类被继承* ValueAnimator:性动画的时间引擎,只负责计算各帧的属性值So要监听计算的值..它不管为对象设置值.我们来负责.* java方式使用步骤4:1用静态方法(3个)ofInt()/ofFloat(start,end)获取ValueAnimator动画对象.* 2设置动画的属性设置如:duration/repeatMode* 3调用动画对象方法start()开始动画.* 4为动画设置监听AnimatorUpdateListener,监听计算出来的值,并将值应用到对象组件上.** ObjectAnimator:ValueAnimator的子类,允许对指定对象的属性执行动画.简单些.* java方式使用步骤3: 1同样静态方法ofxxx(动画应用的对象,应用的属性,属性开始值,结束值)* 后两步同上.无须设置监听器它会帮我把值应用到属性上.* 3注意点:需要为对象的该属性设置setter()方法,这是对自定义组件而言的.* 若属性值只设置了一个,则认为是结束值,还需提供getter()方法,的值作为开始值.* 动画应用的对象为View的话,可能要在onAnimationUpdate()方法里手动调用invlidate()重绘.* AnimatorSet:组合动画,同时,依次* Evaluator 控制如何计算属性值..4子类 int/string/argb/TypeEvaluator(用于实现自定义计算器)* View有3缺点:1 onView()重绘时会重绘整个图片 2 新线程无法直接更新View组件 3 缺乏双缓冲机制.** SurfaceView概述4:1 SurfaceView对应于屏幕上的一块缓存区.* 2 普通View共享一块缓存区.* 3 View绘制在SurfaceView上面.* 4 每个Window对应一个Surface(内有Canvas)* SurfaceView在游戏时实显示有优势. SurfaceHolder:用于在其对应的SurfaceView上绘制图像. 使用步骤4:1 获取SurfaceView对象上的SurfceHolder对象 getHolder() 2 SurfaceHolder对象方法lockCanvas()获取SurfaceView上的Canvas 3 Canvas进行绘制 4 SurfaceHolder方法unlockCanvas() 释放,提交绘制. 还可以实现SurfaceHolder内部接口Callback,监听SurfaceView的生命状态.****** */public class MainActivity extends Activity { private List<Bitmap> list = new ArrayList<>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ImageView imageView = (ImageView) findViewById(R.id.imageView2); BitmapDrawable drawable= (BitmapDrawable)getResources().getDrawable(R.drawable.icon4); assert drawable != null; Bitmap bitmap = drawable.getBitmap(); imageView.setImageBitmap(Bitmap.createBitmap(bitmap, 0, 0, 160, 200)); }}
0 0
- 图形图像处理 补间 逐帧 属性动画 SurfaceView Bitmap
- Android图形图像之补间动画
- Android图形图像之自定义补间动画
- 补间&属性动画
- 补间动画,属性动画
- 初学Android,图形图像之补间动画(三十六)
- 初学Android,图形图像之自定义补间动画(三十八)
- 属性动画,补间动画,帧动画
- 帧动画、补间动画、属性动画
- 帧动画&补间动画&属性动画
- 属性动画、帧动画、补间动画
- Android补间动画属性
- Android图形图像之属性动画
- 补间动画和属性动画
- android 补间动画 属性动画 总结
- 属性动画和补间动画
- android补间动画,属性动画总结
- 69.补间动画和属性动画
- 消息队列基础 RabbitMQ与AMQP协议详解——超大规模高可用OpenStack核心技术深入解析系列(二)
- win32 SDK 组合框获取选中标签索引无效的问题.
- DAY21:leetcode #49 Group Anagrams
- 打码软件是真的吗?
- jquery Ajax 全局调用封装
- 图形图像处理 补间 逐帧 属性动画 SurfaceView Bitmap
- bzoj3571
- OPENSTACK的可伸缩架构的基础:RPC——超大规模高可用OpenStack核心技术深入解析系列
- 宏电7710与组态王通信配置
- ACM篇:POJ2602--Superlong Sums
- php使用xdebug调试
- MongoDB基本操作
- Listview自动上滑的效果
- android studio 使用android:drawableTop与**顶部失真