这部分在书的第4章第1节,使用了android.graphics包中提供的二维图形库。在这个包中有几个基本的类,它们是:
1. Color类
Android中的颜色用四个数字表示,透明度、红、绿、蓝(ARGB)各占一个数字。每个数字8bit(0-255)。Alpha值为0时完全透明。为了提高效率,Android代码使用整数而不是Color类的实例来表示颜色。
创建color对象的方法:(需要import android.graphics.Color;)
(1)使用静态常量:
int color = Color.BLUE;
(2)使用静态工厂(已知ARGB值):
int color = Color.argb(A, R, G, B);
(3)使用XML资源文件:
定义颜色:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="mycolor">#7fff00ff</color>
</resources>
在Java代码中调用:
int color = getResource().getColor(R.color.mycolor);//返回mycolor的资源ID
2. Paint类
Paint类包含图形的样式、颜色以及绘制任何图形(包括位图、文本和几何图形)所需的其他信息。例如使用某种颜色在屏幕上绘图:
import android.graphics.Color;
import android.graphics.Paint;
...
Paint cPaint = new Paint();//构造Paint实例
cPaint.setColor(Color.BLUE);//使用蓝色绘图
...
3. Canvas类
Canvas意为“帆布”,这里我们可以理解为绘图所用的画布。使用Canvas类提供的各种方法可以在画布上绘制线条、举行、圆以及其他可绘制图形。在Android中,屏幕是由Activity类的对象支配的,Activity类的对象引用View类的对象,而View类的对象又引用Canvas类的对象。通过重写View.onDraw()方法,可以在制定的画布上绘图。onDraw()方法唯一的参数就是制定在那个Canvas实例上绘图。
下面是一个重写onDraw()方法的例子。
import android.app.Activity;
import android.os.Bundle;
import android.view.*;
import android.content.*;
import android.graphics.Canvas;
public class Hello extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new GraphicsView(this));
}
static public class GraphicsView extends View {
public GraphicsView(Context context) {
super(context);
Canvas canvas1 = new Canvas();//新建一个画布
onDraw(canvas1);//在画布canvas1上绘制
setBackgroundResource(R.drawable.background);//添加XML渐变背景
}
@Override
public void onDraw(Canvas canvas) {
//Drawing commands go here
}
}
}
4. Path类
Path类包含一组适量绘图命令,可以绘制如线条、举行、曲线等等。比如新建一个圆形路径,只需要将如下代码添加到上述的onDraw()方法中即可在画布canvas1中画出一个圆。其中addCircle()方法中的四个参数分别为圆心x坐标、圆心y坐标、半径(单位是像素)以及绘制方向(CW是顺时针,CCW是逆时针)。
Path circle = new Path();
circle.addCircle(150, 150, 100, Direction.CW);
当然,不要忘记加上:import android.graphics.Path;
5. Drawable类
Drawable类主要针对位图或纯色等只用于显示的视觉元素,可以与其他图形结合使用,或者用于用户界面部件中。这个类支持Bitmap(PNG或JPEG图像)、NinePatch(九宫格)、Shape(基于Path类的形状)、Layers(图层)、States(状态)、Levels(级别)和Scale(缩放)。
可绘图区一般总在XML中定义,以书中的渐变色为例。将如下内容保存为名为background.xml文件放在工程的/res/drawable文件夹中以方便调用。
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<gradient
android:startColor="#3A3C39"<!-- 起始颜色 -->
android:centerColor="#3e8532" <!-- 中间颜色 -->
android:endColor="#181818" <!-- 结束颜色 -->
android:angle="270"<!-- 从上到下过渡 -->
/>
<corners android:radius="0dp" />
</shape>
将其background.xml定义好后我们有如下两种方法调用它:
(1)在xml文件中使用android:background="@drawable/background"这种形式以用它;
(2)咋视图的onCreate()方法中使用setBackgroundResource(R.drawable.background)方法来调用。
第二种方法的实现代码示例如下,其效果和书中的图4-2相似:
import android.app.Activity;
import android.os.Bundle;
import android.view.*;
import android.content.*;
import android.graphics.Color;
import android.graphics.Path;
import android.graphics.Paint;
import android.graphics.Canvas;
import android.graphics.Path.Direction;
public class Hello extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new GraphicsView(this));
}
static public class GraphicsView extends View {
public GraphicsView(Context context) {
super(context);
Canvas canvas1 = new Canvas();//新建一个画布
onDraw(canvas1);//在画布canvas1上绘制
setBackgroundResource(R.drawable.background);//添加XML渐变背景
}
@Override
public void onDraw(Canvas canvas) {
//Drawing commands go here
final String QUOTE = "Welcome to China.";
Path circle = new Path();
Paint cPaint = new Paint();
Paint tPaint = new Paint();
int color = Color.argb(127, 255, 0, 200);
cPaint.setColor(color);//设置路径颜色
tPaint.setColor(Color.BLACK);//设置文字颜色
tPaint.setTextSize(20);//设置文字大小
circle.addCircle(150, 150, 100, Direction.CW);//建立圆
canvas.drawPath(circle, cPaint);//绘制圆
canvas.drawTextOnPath(QUOTE, circle, 360, 20, tPaint);//绘制文字
}
}
}
以上就是第4章第1节的基本内容和相关源码,仅供参考学习!