2D图形应⽤的场景
Android基础知识之2D图形
1、2D图形应⽤的场景
当现有View已经不能满⾜我们的需求时,我们需要绘制⾃⼰的View。
不同形状、不同风格的View
游戏界⾯
地图界⾯
2、Graphics 概述
要绘制2D图形需要aphics中的类来实现
graphics包括:Canvas(画布)、Paint(画笔)、Color(颜⾊)、Bitmap(图像)等。
Graphics具有绘制点、线、颜⾊、图像处理、2D⼏何图形等功能。
以下分别介绍Graphics类的使⽤。
2.1、Paint类
Android中的画笔就Paint 类,主要⽅法有:
setAntiAlias:设置画笔的锯齿效果。
setColor:设置画笔的颜⾊。
setARGB:设置画笔的a,r, g,b值
setAlpha:设置Alpha值。
setStyle:设置画笔的风格,空⼼或实⼼
setStrokeWidth:设置 边框宽度
2.2、Color类
Color 类定义了12种常⽤的颜⾊:
颜⾊常量含义颜⾊常量含义
BLACK⿊⾊GREEN绿⾊
BLUE蓝⾊LTGRAY浅灰⾊
CYAN青绿⾊MAGENTA红紫⾊DKGRAY灰⿊⾊RED红⾊
YELLOW黄⾊TRANSPARENT透明
GRAY灰⾊WHITE⽩⾊2.3、Canvas(画布)
Canvas是graphics中最主要的类,除了可以在画布上绘制外,还可以设置画布的各种属性,主要⽅法如下:Canvas():创建⼀个空画布
Canvas(Bitmap bitmap): 以bitmap对象创建⼀个画布,则将内容都绘制在bitmap上
drawColor:设置背景⾊
clipRect:设置显⽰区域
rotate:旋转画布
skew:设置偏移量
2.4、Canvas绘制⼏何图形
Canvas还提供⼀些绘制⼏何图形的⽅法:
⽅法说明
drawRect绘制矩形
drawCircle绘制圆形
drawOval绘制椭圆
drawPath绘制任意多边形
drawLine绘制直线
drawPoint绘制点
2.5、Canvas绘制字符串
可以调⽤Canvas的drawText (String text, float x, float y, Paint paint) ⽅法绘制⽂字,x,y是⽂字在canvas上的位置坐标,可以调⽤setTextSize, setTextWidths,setARGB等⽅法控制paint。
2.6、绘制图像
- Bitmap bitmap =((BitmapDrawable)getResources().getDrawable(资源索引)).getBitmap();
- Canvas.drawBitmap(bitmap, x, y, null);
2.7、图像缩放旋转处理
Matrix类包含⼀个3*3的矩阵,可以⽤来表⽰旋转、缩放、倾斜、平移等坐标变换。
Matrix matrix =new Matrix();
matrix.setRotate(25.0f);
matrix.postScale(1.0f,1.5f);
canvas.drawBitmap(bitmap, matrix, paint);
2.8、图像像素操作实现特效
通过操作像素,我们可以对图⽚进⾏等效处理。
通过Bitmap的getPixels⽅法获得图像的像素并放到⼀个数组中。
处理像素数组:每⼀个像素由⼀个4字节整数以ARGB的⽅式表⽰,所以按照⼀定的规律改变各点的值就能实现特效。
通过setPixels设置像素数组到Bitmap中
2.9、获得屏幕分辨率
通过getMetrics⽅法得到屏幕的DisplayMetrics属性
DisplayMetrics dm =new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
int screenWidth = dm.widthPixels;
int screenHeight = dm.heightPixels;
3、Animation概述
Android平台的动画分为两类:
⼀类是Tween动画,也叫viewAnimation,通过对场景⾥的对象进⾏变换(平移、缩放、旋转)产⽣动画效果。
另⼀类是Frame动画,也叫DrawableAnimation,按顺序播放实现准备好的素材来实现
3.1、Tween动画
Tween包括以下四种动画效果:
Alpha
Scale
Translae
Rotate
对应类如下:
AlphaAnimation(float fromAlpha,float toAlpha)
ScaleAnimation(float fromX,float toX,float fromY, float toY,int pivotXType,float pivotXValue, int pivotYType,float pivotYvalue)
TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta)
canvas动画RotateAnimation(float fromDegrees, float toDegress, int pivotXType, float pivotXValue, int pivotYType, float
pivotYValue)
设置显⽰时间
setDuration(long durationMillis)
开始播放动画
startAnimation(Animation animation)
3.2、在xml中实现Tween
<set interpolator="@android:anim/decelerate_interpolator">
<scale
fromXScale="1.4"
toXScale="0.0"
fromYScale="0.6"
toYScale="0.0"
pivotX="50%"
pivotY="50%"
startOffset="700"
duration="400"
fillBefore="false"/>
<rotate
fromDegrees="0"
toDegrees="-45"
toYScale="0.0"
pivotX="50%"
pivotY="50%"
startOffset="700"
duration="400"/>
</set>
ImageView spaceshipImage =(ImageView)findViewById(R.id.spaceshipImage );
Animation hyperspaceJumpAnimation = AnimationUtils.loadAnimation(this,R.anim.hyperspace_jump);
spaceshipImage.startAnimation(hyperspaceJumpAnimation);
3.3、Frame动画
<animation-list android="schemas.android/apk/res/android"oneshot="true">
<item drawable="@drawable/rocket_thrust1"duration="200"/>
<item drawable="@drawable/rocket_thrust2"duration="200"/>
<item drawable="@drawable/rocket_thrust3"duration="200"/>
</animation-list>
ImageView rocketImage =(ImageView)findViewById(ket_image);
rocketImage.setBackgroundResource(ket_thrust );
rocketAnimation =(AnimationDrawable)
rocketAnimation.start();
3.4、播放GIF
Android不能直接播放GIF,但我们可以把GIF解析成多个图⽚,只要按顺序逐个显⽰这些图⽚就达到了播放的效果。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论