安卓移动应用开发及实训

Android mobile development and application

安徽师范大学-计算机信息学院-2019-2020学年第一学期, 作者(授课教师): 周文

 

第八章 图形图像

一、 常用绘图类

1.1 Paint类

Paint类代表画笔,用来描述图形的颜色和风格,如线宽、颜色、透明度和填充效果等信息。使用Paint类时,需要先创建该类的对象,这可以通过该类提供的构造方法来实现。

1.2 Paint类的常用方法

方法描述
setARGB(int a, int r, int g, int b)用于设置颜色,各参数值均为0~255之间的整数,分别用于表示透明度、红色、绿色和蓝色值
setColor(int color)用于设置颜色,参数color可以通过Color类提供的颜色常量指定,也可以通过Color.rgb(int red,int green,int blue)方法指定
setAlpha(int a)用于设置透明度,值为0~255之间的整数
setAntiAlias(boolean aa)用于指定是否使用抗锯齿功能,如果使用会使绘图速度变慢
setDither(boolean dither)用于指定是否使用图像抖动处理,如果使用会使图像颜色更加平滑和饱满,更加清晰
setPathEffect(PathEffect effect)用于设置绘制路径时的路径效果,例如点画线
setShader(Shader shader)用于设置渐变,可以使用LinearGradient(线性渐变)RadialGradient(径向渐变)或者SweepGradient(角度渐变)
setShadowLayer(float radius, float dx, float dy, int color)用于设置阴影,参数radius为阴影的角度,dxdy为阴影在x轴和y轴上的距离,color为阴影的颜色。如果参数radius的值为0,那么将没有阴影
setStrokeCap(Paint.Cap cap)用于当画笔的填充样式为STROKE或FILL_AND_STROKE时,设置笔刷的图形样式,参数值可以是Cap.BUTTCap.ROUNDCap.SQUARE。主要体现在线的端点上
setStrokeJoin(Paint.Join join)用于设置画笔转弯处的连接风格,参数值为Join.BEVELJoin.MITERJoin.ROUND
setStrokeWidth(float width)用于设置笔触的宽度
setStyle(Paint.Style style)用于设置填充风格,参数值为Style.FILLStyle.FILL_AND_STROKEStyle.STROKE
setTextAlign(Paint.Align align)用于设置绘制文本时的文字对齐方式,参数值为Align.CENTERAlign.LEFTAlign.RIGHT
setTextSize(float textSize)用于设置绘制文本时的文字的大小
setFakeBoldText(boolean fakeBoldText)用于设置是否为粗体文字
setXfermode(Xfermode xfermode)用于设置图形重叠时的处理方式,例如合并、取交集或并集,经常用来制作橡皮的擦除效果

1.3 Canvas类

1.4 Bitmap类

Bitmap类代表位图,它是Android系统中图像处理的最重要类之一。使用它不仅可以获取图像文件信息,进行图像剪切、旋转、缩放等操作,而且还可以指定格式保存图像文件。

二、绘制2D图形

2.1 绘制几何图形

方法描述举例绘图效果
drawArc(RectF oval, float startAngle, float sweepAngle, boolean useCenter, Paint paint)绘制弧RectF rectf=new RectF(10, 20, 100, 110); canvas.drawArc(rectf, 0, 60, true, paint);
drawArc(RectF oval, float startAngle, float sweepAngle, boolean useCenter, Paint paint)绘制弧RectF rectf1=new RectF(10, 20, 100, 110);canvas.drawArc(rectf1, 0, 60, false, paint);
drawCircle(float cx, float cy, float radius, Paint paint)绘制圆形paint.setStyle(Style.STROKE); canvas.drawCircle(50, 50, 15, paint);
drawLine(float startX, float startY, float stopX, float stopY, Paint paint)绘制一条线canvas.drawLine(100, 10, 150, 10, paint);
drawLines(float[] pts, Paint paint)绘制多条线canvas.drawLines(new float[]{10,10, 30,10, 30,10, 15,30, 15,30, 10,10}, paint);
drawOval(RectF oval, Paint paint)绘制椭圆RectF rectf=new RectF(40, 20, 80, 40); canvas.drawOval(rectf,paint);
drawPoint(float x, float y, Paint paint)绘制一个点canvas.drawPoint(10, 10, paint);
drawPoints(float[] pts, Paint paint)绘制多个点canvas.drawPoints(new float[]{10,10, 15,10, 20,15, 25,10, 30,10}, paint);
drawRect(float left, float top, float right, float bottom, Paint paint)绘制矩形canvas.drawRect(10, 10, 40, 30, paint);
drawRoundRect(RectF rect, float rx, float ry, Paint paint)绘制圆角矩形RectF rectf=new RectF(40, 20, 80, 40); canvas.drawRoundRect(rectf, 6, 6, paint);

2.2 绘制文本

  1. drawText()方法

  2. drawPosText()方法

2.3 绘制路径

  1. 创建路径

    方法描述
    addArc(RectF oval, float startAngle, float sweepAngle)添加弧形路径
    addCircle(float x, float y, float radius, Path.Direction dir)添加圆形路径
    addOval(RectF oval, Path.Direction dir)添加椭圆形路径
    addRect(RectF rect, Path.Direction dir)添加矩形路径
    addRoundRect(RectF rect, float rx, float ry, Path.Direction dir)添加圆角矩形路径
    moveTo(float x, float y)设置开始绘制直线的起始点
    lineTo(float x, float y)moveTo()方法设置的起始点与该方法指定的结束点之间画一条直线,如果在调用该方法之前没使用moveTo()方法设置起始点,那么将从(0,0)点开始绘制直线
    quadTo(float x1, float y1, float x2, float y2)用于根据指定的的参数绘制一条线段轨迹
    close()闭合路径
  2. 将定义好的路径绘制在画布上

    • 使用Canvas类提供的drawPath()方法可以将定义好的路径绘制在画布上

2.4 绘制图片

使用Canvas类绘制图片,只需要使用Canvas类提供的如下表所示的方法来将Bitmap对象中保存的图片绘制到画布上就可以了。

方法描述
drawBitmap(Bitmap bitmap, Rect src, RectF dst, Paint paint)用于从指定点绘制从源位图中“挖取”的一块
drawBitmap(Bitmap bitmap, float left, float top, Paint paint)用于在指定点绘制位图
drawBitmap(Bitmap bitmap, Rect src, Rect dst, Paint paint)用于从指定点绘制从源位图中“挖取”的一块

2.5 实例:绘制Android的机器人

2.6 实例:实现简易涂鸭板

三、添加特效

3.1 旋转图像

使用Android提供的android.graphics.Matrix类setRotate()postRotate()preRotate()方法,可以对图像进行旋转。

3.2 缩放图像

使用Android提供的android.graphics.Matrix类setScale()postScale()和、preScale()方法,可对图像进行缩放。

3.3 倾斜图像

使用Android提供的android.graphics.Matrix类setSkew()postSkew()和、preSkew()方法,可对图像进行倾斜。

3.4 平移图像

使用Android提供的android.graphics.Matrix类setTranslate()postTranslate()和、preTranslate()方法,可对图像进行平移。

3.5 使用BitmapShader渲染图像

(1)创建BitmapShader类的对象,可以通过以下的构造方法进行创建。

(2)通过Paint的setShader()方法来设置渲染对象。

(3)在绘制图像时,使用已经设置了setShader()方法的画笔。

3.6 实例:实现带描边的圆角图片

创建Android项目,实现带描边的圆角图片。

3.7 实例:实现放大镜效果

四、Android中的动画

4.1 实现逐帧动画

4.2 实现补间动画

在Android中提供了透明度渐变动画(AlphaAnimation)、旋转动画(RotateAnimation)、缩放动画(ScaleAnimation)和平移动画(TranslateAnimation)4种补间动画。

4.3 实例:忐忑的精灵

创建Android项目,使用逐帧动画实现一个忐忑的精灵动画。

4.4 实例:旋转、平移、缩放和透明度渐变的补间动画


本章结束

2019-9-1