2D图形应用的场景

1、2D图形应用的场景

  • 当现有View已经不能满足我们的需求时,我们需要绘制自己的View。
  • 不同形状、不同风格的View
  • 游戏界面
  • 地图界面

2、Graphics 概述

  • 要绘制2D图形需要android.graphics中的类来实现
    • 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绘制字符串

  • 可以调用CanvasdrawText (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、图像像素操作实现特效

  • 通过操作像素,我们可以对图片进行等效处理。
    • 通过BitmapgetPixels方法获得图像的像素并放到一个数组中。
    • 处理像素数组:每一个像素由一个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)
    • RotateAnimation(float fromDegrees, float toDegress, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)
  • 设置显示时间
    • setDuration(long durationMillis)
  • 开始播放动画
    • startAnimation(Animation animation)

3.2、在xml中实现Tween


<set android:interpolator="@android:anim/decelerate_interpolator">
        <scale
                   android:fromXScale="1.4"
                   android:toXScale="0.0"
                   android:fromYScale="0.6"
                   android:toYScale="0.0"           
                   android:pivotX="50%"           
                   android:pivotY="50%"           
                   android:startOffset="700"           
                   android:duration="400"           
                   android:fillBefore="false" />        
                   <rotate           
                   android:fromDegrees="0"           
                   android:toDegrees="-45"           
                   android:toYScale="0.0"           
                   android:pivotX="50%"           
                   android:pivotY="50%"           
                   android:startOffset="700"           
                   android: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 xmlns:android="http://schemas.android.com/apk/res/android"    android:oneshot="true">    
	<item android:drawable="@drawable/rocket_thrust1" android:duration="200" />    
	<item android:drawable="@drawable/rocket_thrust2" android:duration="200" />    
	<item android:drawable="@drawable/rocket_thrust3" android:duration="200" />
</animation-list>
ImageView rocketImage = (ImageView) findViewById(R.id.rocket_image);
rocketImage.setBackgroundResource(R.drawable.rocket_thrust );  
rocketAnimation = (AnimationDrawable) 
rocketImage.getBackground();
rocketAnimation.start();

3.4、播放GIF

  • Android不能直接播放GIF,但我们可以把GIF解析成多个图片,只要按顺序逐个显示这些图片就达到了播放的效果。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值