zoukankan      html  css  js  c++  java
  • Andriod绘图的基础知识

    1.位图的配置

    ALPHA_9:用于作为Alpha蒙版的位图,只为Alph通道分配8位。没有其他颜色。

    ARGB_4444:为每个颜色通道分配4位,包括Alpha通道。允许表示拥有16个Alpha值的4096种不同颜色。

    ARGB_8888:为每个颜色通道分配8位,包括Alpha通道。允许表示拥有256个Alpha值的1670万种不同的颜色。

    RGB_565:5位用于红色通道,6位用于绿色通道,以及5位用于蓝色通道(没有Alpha通道)允许有65535种不同的颜色。这个设置几乎与ARGB_8888具有相同的高质量,但占用更少的内存空间。

    2.创建Canvas对象

    如果想创建一幅位图对象,并对其进行绘制,那么我们可以对它创建Canvas对象,例如

    Bitmap bitmap = Bitmap.createBitmap((int) getWindowManager()
    			.getDefaultDisplay().getWidth(), (int) getWindowManager()
    			.getDefaultDisplay().getHeight(), Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(bitmap);

    3.Paint对象的使用

    (1)颜色:可以通过Paint对象上的setColor方法,并传入一个Color对象。Color类定义了一系列颜色,以32位整数常量表示:

    Color.BLACK\Color.BLUE\Color.RED

    还可以通过Color.argb静态方法构造一个特定的颜色,形如:

    int mycolor=Color.argb(255,128,64,32)

    实际上,还可以直接使用Paint对象的方法setARGB来指定颜色:

    paint.setARGB(255,128,64,32);

    (2)样式:当通过setStyle方法定义Paint对象样式时,需要明确是否填充绘制的形状或者仅仅是描画轮廓。可能的样式定义为Paint.Style类的常量。

    Paint.Style.STROKE:仅绘制形状的轮廓

    Paint.Style.FILL:仅填充形状

    Paint.Style.FILL_AND_STROKE:填充并绘制形状的轮廓

    (3)笔画的宽度:可以使用Paint对象上的setStrokeWidth方法指定。

    4.绘制形状

    (1):可以使用Canvas对象的drawPoint方法

    (2)直线:可以使用Canvas对象的drawLine方法

    (3)矩形:可以使用Canvas独享的drawRect方法,不过该方法有两种重载形式,第一种是最简单的直接传入矩形的leftx,topy,rightx,bottomy,另一种是通过传入RectF(RectF类使用浮点值分别表示leftx,topy,rightx,bottomy,以此来定一个矩形)。

    RectF rectangle=new RectF(leftx,topy,rightx,bottomy);
    canvas.drawRect(rectangle,paint);


    (4) 椭圆:与使用RectF对象绘制矩形的方式相同,此时RectF对象定义椭圆的边界,即在矩形的内部绘制椭圆。

    RectF ovalBounds=new RectF(leftx,topy,rightx,bottomy);
    canvas.drawOval(ovalBounds,paint);


    (5) :可以使用Canvas对象的drawCircle方法

    (6)路径:路径是一系列可用来创建任意形状的直线。为了绘制一个路径,首先必须构造一个Path对象。Path对象可以调用任意次数,通过使用moveTo告诉它无须绘制而直接移动到某个点,或者使用lineTo绘制一条直线到某个点,等等方法。

    Paint paint=new Paint();
    Path p=new Path();
    p.moveTo(20,20);//如果不moveTo,则默认在(0,0)处开始绘制
    p.lineTo(100,200);
    p.lineTo(200,100);
    canvas.drawPath(p,paint);

    5. 绘制文本
    我们可以通过Canvas对象的drawText方法来绘制文本,同时可以配合Paint类的setTextSize来设置文本大小。

    (1)内置字体:Paint类提供了setTypeface方法并传入一个Typeface对象来指定应该使用哪种字体。

    Typeface类定义了许多常量来表示Android系统中附带的字体,例如:Typeface.MONOSPACE\Typeface.SANS_SERIF\Typeface.SERIF\Typeface.DEFAULT\Typeface.DEFAULT_BOLD。

    paint.setTypeface(Typeface.DEFAULT_BOLD);


    (2)字体样式:与内置字体一起,Typeface类还定义了一系列的样式常量。通过Typeface中的create方法可以将这些样式应用于修改某个内置字体。这个方法的返回值是一个新的Typeface对象。Typeface中的样式列表:

    Typeface.BOLD\Typeface.ITALIC\Typeface.NORMAL\Typeface.BOLD_ITALIC

    Typeface serif_italic=Typeface.create(Typeface.SERIF,Typeface.ITALIC);

    paint.setTypeface(serif_italic);

    (3)外部字体:Android应用程序不限定只能使用内置字体。其支持从任何TrueType字体文件创建Typeface对象。TrueType字体是一种标准字体,并且可以在各种平台上使用。

    一个与Android内置字体完全不同的字体是由Claude Pelletier创建的Chopin Script字体。它面向公共领域,可以通过各种来源免费下载,如fontspace.com等等。

    为了使用该字体,可以下载它并将.ttf文件放入到项目中的asset文件夹中。Typeface.createFromAsset方法接受一个AssetManager对象以及文件的名称作为参数,其中AssetManager对象可以通过从Context调用getAssets获得。该方法返回一个Typeface对象,可以将它传递给paint.setTypeface方法。

    Typeface chops=Typeface.createFromAsset(getAssets(),"ChopinScript.ttf");
    paint.setTypeface(chops);

    (4)路径上的文本:使用的Canvas对象的drawTextOnPath方法



  • 相关阅读:
    poj 1860 Currency Exchange(最短路径的应用)
    poj 2965 The Pilots Brothers' refrigerator
    zoj 1827 the game of 31 (有限制的博弈论)
    poj 3295 Tautology (构造法)
    poj 1753 Flip Game(枚举)
    poj 2109 (贪心)
    poj 1328(贪心)
    Qt 对单个控件美化
    Qt 4基础
    Bash Shell
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/2985709.html
Copyright © 2011-2022 走看看