您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业财务 > Android课件――第四章 Android 图形图像
第四章Android图形图像•4.1Drawable和ShapDrawable•4.2NinePatchDrawable•4.3Bitmap和BitmapFactory•4.4绘图-Canvas、Paint、Path•4.5特效-Matrix、Shader•4.6Tween动画和Frame动画•4.7SurfaceView•4.8OpenGL4.1Drawable和ShapDrawable•DrawableDrawable是一个通用的抽象类,它的目的是告诉你什么东西是可以画的。你会发现基于Drawable类扩展出各种绘图的类包括:BitmapDrawable、ShapeDrawable、PictureDrawable、LayerDrawable,当然你可以继承它来创建你自己的绘图类。•定义和实例化一个Drawable从资源图像文件中创建从XML文件中创建从资源图像文件中创建一个比较简单的方法是添加一个图片到你的程序中,然后通过资源文件引用这个文件,支持的文件类型有PNG(首选的)JPG(可接受的)GIF(不建议)。图片资源添加到res/drawable/目录中引用它到你的代码或你的XML布局中引用它也可以用资源编号从XML文件中创建图片资源添加到res/drawable/目录中在XML中定义Drawable引用它也可以用资源编号ShapeDrawable画一些动态的2D图片,ShapeDrawable继承了Drawable,所以你可以调用Drawable里有的函数4.2NinePatchDrawableNinePatchDrawable绘画的是一个可以伸缩的位图图像,Android会自动调整大小来容纳显示的内容。NinePatchDrawable是一个标准的PNG图像,它包括额外的1个像素的边界,你必须保存它后缀为.9.png,并且保持到工程的res/drawable目录中。Android提供绘制工具4.3Bitmap和BitmapFactory•Bitmap方式1:建立空的BitmapBitmapvBitmap=Bitmap.createBitmap(vWidth,vHeight,Bitmap.Config);方式2:取得Resource的BitmapBitmapvBitmap=BitmapFactory.decodeResource(vContext.getResources(),R.drawable.drawable_name);方式3:取得图档的BitmapBitmapvBitmap=BitmapFactory.decodeStream(vContentResolver.openInputStream(uri));要获取位图信息,比如位图大小、像素、density、透明度、颜色格式等,获取得到Bitmap就迎刃而解了,这里只是辅助说明以下2点:在Bitmap中对RGB颜色格式使用Bitmap.Config定义,仅包括ALPHA_8、ARGB_4444、ARGB_8888、RGB_565,缺少了一些其他的,比如说RGB_555,在开发中可能需要注意这个小问题;Bitmap还提供了compress()接口来压缩图片,不过AndroidSAK只支持PNG、JPG格式的压缩;其他格式的需要Android开发人员自己补充了。4.4绘图-Canvas、Paint、Path•Canvas在Android中,把Canvas当做画布,可以在画布上绘制我们想要的任何东西。方法:clipXXX裁剪,通过Path,Rect,Region的不同组合,几乎可以支持任意现状的裁剪区域。如:ClipPath,ClipRect,ClipRegiondrawXXX绘制,可绘制图片,图形等。如:drawBtimap、drawLinesave()方法作用:用来保存canvas状态的。save()时可以得到一个返回值,是用来确定保存时间的。使用restoreToCount()方法时可以把此值当参数传递,可以还原到指定的保存时间。restore()方法作用:用来恢复canvas状态的,还原到上一次savie()时的状态。translate()translate(floatdx,floatdy);方法作用:移动canvas和它的原点到不同的位置上。默认原点坐标为(0,0)参数:dx,左右偏移量(正数是向右移动)dy,上下偏移量(正数是向下移动)rotate()rotate(floatdegrees);方法作用:以原点为中心对canvas旋转。默认原点坐标为(0,0)参数:degrees旋转弧度Scale()scale(floatsx,floatsy);方法作用:增减图形在canvas中的像素数目,对形状,位图进行缩小或者放大。参数:sx,横轴缩放大小sy,数轴缩放大小scale(floatsx,floatsy,floatpx,floatpy);px,设置原点的位置(与rotate中的px正好相反,正数是向左移动)py,设置原点的位置(与rotate中的py正好相反,正数是向上移动)•什么是Paint?Paint类包含样式和颜色有关如何绘制几何形状,文本和位图的信息。Canvas是一块画布,具体的文本和位图如何显示,这就是在Paint类中定义了。•Paint有哪些功能?字体、大小(TextSize)、颜色(TextColor)、对齐方式(TextAlign)、粗体(Bold)、斜体(Italic)、下划线(Underline)等字体类型:Typeface类——(BOLD,BOLD_ITALIC,ITALIC,NORMAL)•使用Paint显示StringPaintp=newPaint();StringfamilyName=“宋体”;Typefacefont=Typeface.create(familyName,Typeface.BOLD);p.setColor(Color.RED);p.setTypeface(font);p.setTextSize(22);canvas.drawText(mstrTitle,0,100,p);•Path对于Android游戏开发或者说2D绘图中来讲Path路径可以用强大这个词来形容。在Photoshop中我们可能还记得使用钢笔工具绘制路径的方法。Path路径类在位于android.graphics.Path中,Path的构造方法比较简单,如下Pathcwj=newPath();//构造方法下面我们画一个封闭的原型路径,我们使用Path类的addCircle方法cwj.addCircle(10,10,50,Direction.CW);//参数一为x轴水平位置,参数二为y轴垂直位置,第三个参数为圆形的半径,最后是绘制的方向,CW为顺时针方向,而CCW是逆时针方向cwj.addCircle(10,10,50,Direction.CW);//参数一为x轴水平位置,参数二为y轴垂直位置,第三个参数为圆形的半径,最后是绘制的方向,CW为顺时针方向,而CCW是逆时针方向•结合Android上次提到的Canvas类中的绘制方法drawPath和drawTextOnPath,我们继续可以在onDraw中加入。canvas.drawPath(cwj,paintPath);//大家这里paintPath为路径的画刷颜色,可以见下文完整的源代码。canvas.drawTextOnPath(“The9-CWJ,cwj,0,15,paintText);//将文字绘制到路径中去canvas.drawPath(cwj,paintPath);//大家这里paintPath为路径的画刷颜色。canvas.drawTextOnPath(“The9-CWJ,cwj,0,15,paintText);//将文字绘制到路径中去4.5特效-Matrix、Shader•MatrixMatrix类拥有一个3x3矩阵转换坐标。它必须被显式初始化的使用复位()或者-构造一个矩阵函数(如setTranslate,setRotate等)。Matrix的操作,总共分为translate(平移),rotate(旋转),scale(缩放)和skew(倾斜)四种Matrix提供set,post和pre三种操作方式,除了translate,其他三种操作都可以指定中心点。set是直接设置Matrix的值,每次set一次,整个Matrix的数组都会变掉。post是后乘,当前的矩阵乘以参数给出的矩阵。可以连续多次使用post,来完成所需的整个变换。例如,要将一个图片旋转30度,然后平移到(100,100)的地方,那么可以这样做:Matrixm=newMatrix();m.postRotate(30);m.postTranslate(100,100);pre是前乘,参数给出的矩阵乘以当前的矩阵。所以操作是在当前矩阵的最前面发生的。例如上面的例子,如果用pre的话,就要这样:Matrixm=newMatrix();m.setTranslate(100,100);m.preRotate(30);旋转、缩放和倾斜都可以围绕一个中心点来进行,如果不指定,默认情况下,是围绕(0,0)点来进行。•ShaderAndroid中提供了Shader类专门用来渲染图像以及一些几何图形Shadershader=newBitmapShader(…..)Shadershader=newLinearGradient(…..)Paintpaint=newPaint();Paint.setShader(shader);4.6Tween动画和Frame动画Android平台提供了两类动画,分别是Tween动画和Frame动画。Tween通过场景里的对象不断的进行图片的变换,比如平移、渐变、缩放、旋转等来产生动画效果;Frame动画叫做顺序播放实现做好的图像和电影类似。另外加上gif动画,因为如果直接使用Bitmap或其他方法直接调用gif图片资源的话,显示的是静态的,如果要做成动态的,就需要一些其他的方法来实现。•Tween动画Alpha:渐变透明度动画Scale:渐变尺寸伸缩动画Translate:画面转换位置移动动画Rotate:画面转移旋转动画•AlphaAnimation(floatfromAlpha,floattoAlpha)功能:创建一个透明度渐变的动画参数说明:fromAlpha是动画起始时透明度;toAlpha是动画结束时透明度注:0.0表示完全透明,1.0表示完全不透明1、直接在程序中创建动画//创建Alpha动画Animationalpha=newAlphaAnimation(0.1f,1.0f);alpha.setDuration(5000);//设置动画时间为5秒img.startAnimation(alpha);//开始播放2、通过XML来创建动画alpha_anim.xml。在res/anim目录下?xmlversion=1.0encoding=utf-8?setxmlns:android=:fromAlpha=0.1android:toAlpha=1.0android:duration=5000/alpha/setjava调用Animationscale=AnimationUtils.loadAnimation(TweenActivity.this,R.anim.scale_anim);img.startAnimation(scale);//开始动画ScaleAnimation(floatfromX,floattoX,floatfromY,floattoY,intpivotXType,floatXValue,intpivotYType,floatpivotYValue)功能:创建一个渐变尺寸伸缩动画参数:fromX
本文标题:Android课件――第四章 Android 图形图像
链接地址:https://www.777doc.com/doc-3375718 .html