Hello Android学习笔记之2D绘图基础

      这部分在书的第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节的基本内容和相关源码,仅供参考学习!

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值