`
jiav_net
  • 浏览: 109360 次
文章分类
社区版块
存档分类
最新评论

809 Res Bitmap Drawable Canvas 详解

 
阅读更多
Res Bitmap Drawable Canvas 详解 

1.Resources
  1.res/raw目录下的 InputStream inputStream=getResources().openRawResource(int id);
  2.getDimension(int id) 
  3.DisplayMetrics  getDisplayMetrics() 
  4.Drawable  getDrawable(int id)  
  5.int[]  getIntArray(int id)  
  6.int  getInteger(int id)
  7.XmlResourceParser  getLayout(int id)    
  8.String  getString(int id)  
  9.String[]  getStringArray(int id)  
  10.XmlResourceParser  getXml(int id)
  11.TypedArray  obtainAttributes(AttributeSet set, int[] attrs)    
  12.TypedArray  obtainTypedArray(int id)  
  13.InputStream  openRawResource(int id, TypedValue value)  
  14.InputStream  openRawResource(int id)  
  15.AssetFileDescriptor  openRawResourceFd(int id)  
  16.void parseBundleExtras(XmlResourceParser parser, Bundle outBundle)  从XML文件中获取数据

备注:final InputStream  open(String fileName, int accessMode) | final AssetFileDescriptor  openFd

(String fileName)  获取asset目录下文件 FileDescriptor  getFileDescriptor()  

在Context中final TypedArray  obtainStyledAttributes(int[] attrs) 或 final TypedArray  

obtainStyledAttributes(AttributeSet set, int[] attrs)  获取TypedArray

2.Bitmap 代表一张位图,BitmapDrawable 里封装的就是一个bitmap
  1.Bitmap drawable.getBitmap();
  2.static Bitmap createBitmap(Bitmap source, int x, int y, int width, int height, Matrix m, boolean 

filter) 从原为图source     的指定坐标点(x,y) 开始,从中抠出宽width,高height的一块,创建出新的位图,并

按照Matrix指定的规则进行转换
  3.static Bitmap  createBitmap(int width, int height, Bitmap.Config config)  
  4.static Bitmap  createBitmap(Bitmap source, int x, int y, int width, int height)从原为图source 的

指定坐标点(x,y) 开始,    从中抠出宽width,高height的一块,创建出新的位图
  5.static Bitmap  createBitmap(int[] colors, int width, int height, Bitmap.Config config)  
  6.static Bitmap  createBitmap(Bitmap src)  
BitmapFactory中的类 
  7.static Bitmap  decodeFileDescriptor(FileDescriptor fd)  
  8.static Bitmap  decodeFile(String pathName, BitmapFactory.Options opts)  
  9.static Bitmap  decodeByteArray(byte[] data, int offset, int length, BitmapFactory.Options opts)  
  10.static Bitmap  decodeResource(Resources res, int id, BitmapFactory.Options opts)  
  11.static Bitmap  decodeStream(InputStream is)  

Bitmap中的方法
1.boolean  compress(Bitmap.CompressFormat format, int quality, OutputStream stream) 将一个压缩的位图

写到outputstream中 (只支持PNG、JPG格式的压缩) Bitmap.CompressFormat  JPEG  PNG WEBP
2.final int  getByteCount() 返回的字节数,用于存储此图的像素
3.final Bitmap.Config  getConfig()  Bitmap.Config ALPHA_8(每个像素都存储为一个单一的半透明通道)|

ARGB_4444(废弃了)|ARGB_8888(每个像素都储存在4个字节)|RGB_565 
4.int  getDensity()  返回这个位图的密度
5.final int  getHeight()  
6.int  getPixel(int x, int y)  返回指定位置的颜色
7.final int  getWidth()  
8.final boolean  isRecycled() 
9.void  recycle()  
10.boolean  sameAs(Bitmap other)  
11.void  setDensity(int density)  指定这个位图的密度
12.void  setPixel(int x, int y, int color)  将指定的颜色写在位图的指定位图的x,y坐标
13.void  setPixels(int[] pixels, int offset, int stride, int x, int y, int width, int height) 取代像

素的位图的颜色数组中

2.Drawable 
当在Drawable三个文件中导入图像文件时,android会自动为这个图像文件生成一个Drawable对象,可以通过

getResource.getDrawable(int)直接获取
Deawable直接子类:BitmapDrawable, ClipDrawable, ColorDrawable, DrawableContainer, GradientDrawable, 

InsetDrawable, LayerDrawable, NinePatchDrawable, PictureDrawable, RotateDrawable, ScaleDrawable, 

ShapeDrawable 

间接之类:AnimationDrawable, LevelListDrawable, PaintDrawable, StateListDrawable, TransitionDrawable  

Drawable就是一个可画的对象,其可能是一张位图(BitmapDrawable),也可能是一个图形(ShapeDrawable),还

有可能是一个图层(LayerDrawable),我们根据画图的需求,创建相应的可画对象,就可以将这个可画对象当作一

块“画布(Canvas)”,在其上面操作可画对象,并最终将这种可画对象显示在画布上,有点类似于“内存画布“

。
1.BitmapDrawable
  1.BitmapDrawable() 
  2.BitmapDrawable(Resources res) 
  3.BitmapDrawable(Bitmap bitmap) 
  4.BitmapDrawable(InputStream is) 
  5.void draw(Canvas canvas) 
  6.final Bitmap  getBitmap()  
  7.int  getGravity()  
  8.int  getIntrinsicHeight()  返回潜在的drawable对象的固有高度
  9.int  getIntrinsicWidth()  
  10.int  getOpacity() 返回这个drawable的透明度或不透明度
  11.final Paint  getPaint()  返回用于给这个drawable着色的paint对象
  12.void  setAlpha(int alpha)  
  13.void  setAntiAlias(boolean aa)  设置这个drawable是否有锯齿
  14.void  setGravity(int gravity)  
  15.void  setTileModeX(Shader.TileMode mode)设置重复行为的X轴绘图Shader.TileMode :CLAMP|     MIRROR 

|REPEAT
  16.final Rect  getBounds()  返回这个drawable的边界矩形
  17.int  getMinimumHeight()  返回这个drawable建议的最小高度
  18.int  getMinimumWidth()  
  19.void  setBounds(int left, int top, int right, int bottom)  这个drawable特色的矩形边界框
  20.接口 Drawable.Callback 需实现三个方法 1.void invalidateDrawable (Drawable who) 这个drawable被要

求重画的时候回调,因此我们对应于该View的背景Drawable对象能够”绘制出来”.2.scheduleDrawable (Drawable 

who, Runnable what, long when) drawable可以通过该方法来安排动画的下一帧。可以调用postAtTime(Runnable, 

Object, long)来实现该方法。参数分别与方法的参数对 3.unscheduleDrawable (Drawable who, Runnable what) 
可以用于取消先前通过scheduleDrawable(Drawable who, Runnable what, long when)调度的某一帧。可以通过调

用removeCallbacks(Runnable,Object)来实现 

3.Canvas
  1.new Canvas() 
  2.Canvas(Bitmap bitmap) 
  3.boolean  clipPath(Path path)  剪切当前的路径
  4.boolean  clipRect(RectF rect) 剪切矩形区域 
  5.boolean  clipRect(Rect rect)  Rect 和RectF 精度不一样 Rect是int,RectF是float
  6.boolean  clipRect(float left, float top, float right, float bottom)  
  7.boolean  clipRegion(Region region)  
  8.boolean  clipRect(Rect rect, Region.Op op)  其他方法中也有Region.Op INTERSECT 取两者交集,默认的

方式; DIFFERENCE 第一次不同于第二次的部分显示出来 ; REPLACE 显示第二次的 ;REVERSE_DIFFERENCE 第二

次不同于第一次的部分显示 UNION 取全集 ;XOR补集,就是全集的减去交集的剩余部分显示
  9.void  drawARGB(int a, int r, int g, int b)  
  10.void drawArc(RectF oval, float startAngle, float sweepAngle, boolean useCenter, Paint paint) 弧
  11.void  drawBitmap(Bitmap bitmap, Matrix matrix, Paint paint)  
  12.void  drawBitmap(Bitmap bitmap, float left, float top, Paint paint)  
  13.void drawBitmapMesh (Bitmap bitmap, int meshWidth, int meshHeight, float[] verts, int 

vertOffset, int[] colors, int colorOffset, Paint paint) meshWidth:横向上的格数 meshHeight:纵向的格

数 ;verts:数组的x,y对,指定要画的网格,必须有至少(meshWidth + 1)*(meshHeight + 1)* 2 + meshOffset值的数

组;vertOffset :控制verts数组从第几个数组开始对bitmap进行扭曲
  14.void  drawCircle(float cx, float cy, float radius, Paint paint)  
  15.void  drawLine(float startX, float startY, float stopX, float stopY, Paint paint)  
  16.void  drawOval(RectF oval, Paint paint)  椭圆
  17.void  drawPath(Path path, Paint paint)  
  18.void  drawPicture(Picture picture)  
  19.void  drawPoint(float x, float y, Paint paint)  
  20.void  drawPoints(float[] pts, int offset, int count, Paint paint)  
  21.void  drawRoundRect(RectF rect, float rx, float ry, Paint paint)  圆角矩形
  22.void  drawText(String text, float x, float y, Paint paint)  
  23.void  drawTextOnPath(String text, Path path, float hOffset, float vOffset, Paint paint)  
  24.int  getDensity()  
  25.int  getHeight()  
  26.final Matrix  getMatrix()  
  27.void  restore()  
  28.final void  rotate(float degrees, float px, float py)  
  29.int  save()  
  30.final void  scale(float sx, float sy, float px, float py)  进行缩放
  31.void  setBitmap(Bitmap bitmap)  
  32.void  translate(float dx, float dy)  

在canvas中有个方法:drawPicture(),picture类,它并不存储实际的像素,仅仅记录了每个绘制的过程

1.Canvas   beginRecording(int width, int height)   //开始记录绘制过程
2.static Picture   createFromStream(InputStream stream)   //静态方法,从输入流创建一个Pictrue对象
3.void   draw(Canvas canvas)   //在canvas上画这个picture对象
4.void   endRecording()   //结束录制绘制过程
5.int   getHeight() | int   getWidth() 
6.void   writeToStream(OutputStream stream)   //将绘制结果写到输出流中  
PictureDrawable类 继承自drawable
1.PictureDrawable(Picture picture) 
2.void  draw(Canvas canvas)  
3.Picture  getPicture() 
4.void  setPicture(Picture picture)  

Paint类

 1.Paint() | Paint(Paint paint) 
 2.void  setARGB(int a, int r, int g, int b)  设置颜色
 3.void  setAlpha(int a)  
 4.void  setAntiAlias(boolean aa)  
 5.void  setColor(int color)  
 6.Shader  setShader(Shader shader)  设置填充效果
 7.void  setShadowLayer(float radius, float dx, float dy, int color)  设置阴影
 8.void  setStrokeWidth(float width)  设置画笔宽度
 9.void  setStyle(Paint.Style style)  Paint.Style  FILL  FILL_AND_STROKE STROKE 
 10.void  setTextAlign(Paint.Align align)  Paint.Align  CENTER   LEFT RIGHT 
 11.float  measureText(String text)  返回text宽度
 12.float  getTextSize()  
 13.PathEffect  setPathEffect(PathEffect effect)  路径效果
 14.void  setStrokeJoin(Paint.Join join)  Paint.Join  BEVEL MITER ROUND 画笔转弯处的连接风格

Path类
 1.Path() | Path(Path src) 
 2.void  addArc(RectF oval, float startAngle, float sweepAngle)  
 3.void  addPath(Path src, float dx, float dy)  
 4.void  close()  
 5.boolean  isEmpty()  
 6.boolean  isRect(RectF rect)  
 7.void  lineTo(float x, float y)  
 8.void  moveTo(float x, float y)  设置开始下一个轮廓点(x,y)。
 9.void  reset()  
 10.void  transform(Matrix matrix)  转换通过Matrix
 11.void  addCircle(float x, float y, float radius, Path.Direction dir)  Path.Direction  CCW CW
 12.void  addRect(float left, float top, float right, float bottom, Path.Direction dir)  
 13.void  addOval(RectF oval, Path.Direction dir)  


分享到:
评论

相关推荐

    android bitMap

    ### Android Bitmap 概念与操作详解 #### 一、引言 在Android开发过程中,`Bitmap` 是一个非常重要的类,它主要用于表示图像数据。通过`Bitmap` 可以进行图像的各种操作,如加载、显示、缩放、旋转等。此外,`...

    android bitmap

    ### Android Bitmap详解 在Android开发过程中,Bitmap是处理图像数据的核心类之一,它主要用于表示和操作位图。本文将从Bitmap的基本概念出发,详细介绍Bitmap在Android中的应用方式、转换技巧及优化策略等。 ####...

    Android_UI开发

    - `Drawable getDrawable(int id)`:获取指定ID的图形资源,对应于 `res/drawable/` 目录。 - `XmlResourceParser getLayout(int id)`:获取指定ID的布局资源,对应于 `res/layout/` 目录。 - `String getString(int...

    android画图总结.pdf

    本文将详细介绍Android画图技术的核心知识点,包括资源的获取、Bitmap、Drawable、Animation以及Paint等方面的内容。 #### 二、资源的获取 在开始画图之前,我们需要了解如何在Android应用中获取资源。Android应用...

    Android画图学习笔记

    - 位图绘制: 如`canvas.drawBitmap(Bitmap bitmap, Rect src, Rect dest, Paint paint)`。 #### 七、动画处理 - **基本概念**: - **帧动画** (`FrameAnimation`): 通过快速切换不同的图像帧来模拟运动。 - **...

    android拼图游戏源码

    - **图片资源**:图片资源应妥善存储在项目的res/drawable目录下,并在运行时加载。Android提供了多种方式来加载和缓存图片,如 BitmapFactory 和 Glide 等库。 - **内存管理**:由于拼图游戏可能涉及大量图片,...

    Android画图(以画图为例说明如何使用SDK)

    通过`android.content.res.Resources`类可以方便地访问应用内的各种资源,如图片、字符串等。`Resources`类提供了一系列的方法来帮助开发者获取这些资源: - `int getColor(int id)`:根据资源ID获取颜色值。 - `...

    安卓Andriod源码——时间轴样式.zip

    在Android项目中,图片资源通常存放在`res/drawable`目录下,通过`R.drawable`来引用。在`TimeNodeView`中,我们可以通过`Bitmap`和`BitmapDrawable`来加载和显示这个图片。 为了动态添加或更新时间轴上的节点,...

    android连连看游戏源码

    1. **图像资源**:QQ图像作为游戏元素,需要在res/drawable目录下存放,源码中会通过Bitmap对象加载和显示这些图像。 2. **音频资源**:游戏可能会包含背景音乐和音效,需要正确加载和播放,可以通过MediaPlayer或...

    android 拼图拼图游戏

    这可以通过Java代码实现,使用Bitmap类来加载图片,然后使用Canvas和Rect对象进行切割。分割后的图片可以存储在一个二维数组中,便于后续的随机排列和位置交换。 3. **布局设计**: 使用XML布局文件定义游戏界面。...

    android练习题

    熟悉Android的图形模块,包括Canvas和Bitmap,可以帮助更深入地处理图像。 6. **按键控制**: - 处理设备按键事件是Android开发的重要部分。通过重写Activity的onKeyDown()和onKeyUp()方法,可以监听和响应硬件...

    Android 圆形头像/有外边框的圆形头像CircleImageView自定义控件使用详解

    它的核心思想是利用`Canvas`的`drawCircle()`和`drawBitmap()`方法来绘制圆形图像。当设置一个图片资源时,`CircleImageView`会自动将其裁剪为圆形。 安装`CircleImageView`库非常简单,通常通过添加Gradle依赖实现...

    API-Demos(7.0源码)

    4. `Graphics`:图形和图像处理,如Bitmap、Canvas、Shader等的使用。 5. `Views`:展示各种自定义View和内置View的使用,如ScrollView、ListView、GridView等。 三、关键知识点详解 1. `Intent`与`...

    android筛子游戏源码

    - `Bitmap`和`Canvas`:为了显示骰子的图像,开发者可能使用了`Bitmap`对象加载图片资源,并在`Canvas`上绘制。每次掷骰子,可能需要改变`Bitmap`的显示状态,以显示不同的点数。 - `Animation`:为了增强用户体验...

    android自定义开关控件-SlideSwitch的实例

    《Android自定义开关控件-SlideSwitch的实例详解》 在Android开发中,为了实现更加个性化的用户界面,我们有时需要自定义控件。本文将详细介绍如何创建一个自定义的开关控件——SlideSwitch,该控件模仿了iPhone上...

    屏保

    bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.your_image); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); if (bitmap != null) { canvas.drawBitmap...

    Android推箱子项目PushBox.zip

    4. 图形绘制:Android的`Canvas`和`Bitmap`类用于在屏幕上绘制游戏画面。开发者需要实现自定义的`View`类,覆盖`onDraw`方法,根据游戏状态绘制游戏元素。 5. 数据持久化:为了保存用户的进度,项目可能会使用`...

    疯狂Android讲义(第2版)源代码

    - Bitmap与Drawable:图像处理,包括裁剪、缩放、旋转等操作。 15. **第十五章:多媒体处理** - 音频播放:使用MediaPlayer类播放音频文件。 - 视频播放:VideoView组件的使用,以及自定义SurfaceView播放视频。...

    以一个着色游戏展开讲解Android中区域图像填色的方法

    如下所示:\n```xml\n<layer-list xmlns:android="http://schemas.android.com/apk/res/android">\n <item android:drawable="@drawable/eel_mask1"/>\n <item android:drawable="@drawable/eel_mask2"/>\n <!...

Global site tag (gtag.js) - Google Analytics