Android UI开发专题(一) 之界面设计_移动开发_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > 移动开发 > Android UI开发专题(一) 之界面设计

Android UI开发专题(一) 之界面设计

 2011/1/12 8:44:29  阿顺顺  http://panshunli9288.javaeye.com  我要评论(0)
  • 摘要:近期很多网友对Android用户界面的设计表示很感兴趣,对于AndroidUI开发自绘控件和游戏制作而言掌握好绘图基础是必不可少的。本次专题分10节来讲述,有关OpenGLES相关的可能将放到以后再透露。本次主要涉及以下四个包的相关内容:android.content.res资源类android.graphics底层图形类android.view显示类android.widget控件类一、android.content.res.Resources对于Android平台的资源类android
  • 标签:android 开发 设计
近期很多网友对Android用户界面的设计表示很感兴趣,对于Android UI开发自绘控件和游戏制作而言掌握好绘图基础是必不可少的。本次专题分10节来讲述,有关OpenGL ES相关的可能将放到以后再透露。本次主要涉及以下四个包的相关内容:

? android.content.res 资源类
android.graphics? 底层图形类
android.view? 显示类
android.widget? 控件类

?? 一、android.content.res.Resources

?? 对于Android平台的资源类android.content.res.Resources可能很多网友比较陌生,一起来看看SDK上是怎么介绍的 吧,Contains classes for accessing application resources, such as raw asset files, colors, drawables, media or other other files in the package, plus important device configuration details (orientation, input types, etc.) that affect how the application may behave.平时用到的二进制源文件raw、颜色colors、图形drawables和多媒体文件media的相关资源均通过该类来管理。

? int? getColor(int id)??对应res/values/colors.xml
Drawable? getDrawable(int id)? 对应res/drawable/?
XmlResourceParser? getLayout(int id)? 对应res/layout/
String? getString(int id)?和CharSequence? getText(int id)?? 对应res/values/strings.xml
InputStream? openRawResource(int id)? 对应res/raw/
void parseBundleExtra (String tagName, AttributeSet attrs, Bundle outBundle) 对应res/xml/

??String[]? getStringArray(int id)? res/values/arrays.xml
float? getDimension(int id)? res/values/dimens.xml

? 二、android.graphics.Bitmap

? 作为位图操作类,Bitmap提供了很多实用的方法,常用的我们总结如下:
boolean? compress(Bitmap.CompressFormat format, int quality, OutputStream stream) 压缩一个Bitmap对象根据相关的编码、画质保存到一个OutputStream中。其中第一个压缩格式目前有JPG和PNG
void? copyPixelsFromBuffer(Buffer src)?从一个Buffer缓冲区复制位图像素
void? copyPixelsToBuffer(Buffer dst)??将当前位图像素内容复制到一个Buffer缓冲区

? 我们看到创建位图对象createBitmap包含了6种方法在目前的Android 2.1 SDK中,当然他们使用的是API Level均为1,所以说从Android 1.0 SDK开始就支持了,所以大家可以放心使用。

static Bitmap? createBitmap(Bitmap src)
static Bitmap? createBitmap(int[] colors, int width, int height, Bitmap.Config config)
static Bitmap? createBitmap(int[] colors, int offset, int stride, int width, int height, Bitmap.Config config)
static Bitmap? createBitmap(Bitmap source, int x, int y, int width, int height, Matrix m, boolean filter)
static Bitmap? createBitmap(int width, int height, Bitmap.Config config)
static Bitmap? createBitmap(Bitmap source, int x, int y, int width, int height)
static Bitmap? createScaledBitmap(Bitmap src, int dstWidth, int dstHeight, boolean filter)? //创建一个可以缩放的位图对象

?final int? getHeight()? 获取高度
final int? getWidth()?? 获取宽度
final boolean? hasAlpha()?? 是否有透明通道
void? setPixel(int x, int y, int color)?? 设置某像素的颜色
int? getPixel(int x, int y)? 获取某像素的颜色,android开发网提示这里返回的int型是color的定义

?三、android.graphics.BitmapFactory

? 作为Bitmap对象的I/O类,BitmapFactory类提供了丰富的构造Bitmap对象的方法,比如从一个字节数组、文件系统、资源ID、以及 输入流中来创建一个Bitmap对象,下面本类的全部成员,除了decodeFileDescriptor外其他的重载方法都很常用。

static Bitmap? decodeByteArray(byte[] data, int offset, int length) //从字节数组创建

static Bitmap? decodeByteArray(byte[] data, int offset, int length, BitmapFactory.Options opts)

static Bitmap? decodeFile(String pathName, BitmapFactory.Options opts) //从文件创建,路径要写全

static Bitmap? decodeFile(String pathName)

static Bitmap? decodeFileDescriptor(FileDescriptor fd, Rect outPadding, BitmapFactory.Options opts)? //从输入流句柄创建

static Bitmap? decodeFileDescriptor(FileDescriptor fd)

static Bitmap? decodeResource(Resources res, int id)? //从Android的APK文件资源中创建,android123提示是从/res/的drawable中

static Bitmap? decodeResource(Resources res, int id, BitmapFactory.Options opts)

static Bitmap? decodeResourceStream(Resources res, TypedValue value, InputStream is, Rect pad, BitmapFactory.Options opts)

static Bitmap? decodeStream(InputStream is)? //从一个输入流中创建

static Bitmap? decodeStream(InputStream is, Rect outPadding, BitmapFactory.Options opts)

?四、android.graphics.Canvas

?从J2ME MIDLET时我们就知道Java提供了Canvas类,而目前在Android平台中,它主要任务为管理绘制过程,The Canvas class holds the "draw" calls. To draw something, you need 4 basic components: A Bitmap to hold the pixels, a Canvas to host the draw calls (writing into the bitmap), a drawing primitive (e.g. Rect, Path, text, Bitmap), and a paint (to describe the colors and styles for the drawing).

?该类主要提供了三种构造方法,分别为构造一个空的Canvas、从Bitmap中构造和从GL对象中创建,如下

Canvas()?
Canvas(Bitmap bitmap)?
Canvas(GL gl)

?同时Canvas类的一些字段保存着重要的绘制方法定义,比如Canvas.HAS_ALPHA_LAYER_SAVE_FLAG 保存时需要alpha层,对于Canvas类提供的方法很多,每个都很重要,下面我们一一作介绍

boolean? clipPath(Path path)
boolean? clipPath(Path path, Region.Op op)
boolean? clipRect(float left, float top, float right, float bottom)
boolean? clipRect(Rect rect)
boolean? clipRect(float left, float top, float right, float bottom, Region.Op op)
boolean? clipRect(Rect rect, Region.Op op)
boolean? clipRect(RectF rect)
boolean? clipRect(RectF rect, Region.Op op)
boolean? clipRect(int left, int top, int right, int bottom)
boolean? clipRegion(Region region, Region.Op op)
boolean? clipRegion(Region region)

void? concat(Matrix matrix)

void? drawARGB(int a, int r, int g, int b)
void? drawArc(RectF oval, float startAngle, float sweepAngle, boolean useCenter, Paint paint)

void? drawBitmap(Bitmap bitmap, Matrix matrix, Paint paint)
void? drawBitmap(int[] colors, int offset, int stride, float x, float y, int width, int height, boolean hasAlpha, Paint paint)
void? drawBitmap(Bitmap bitmap, Rect src, Rect dst, Paint paint)
void? drawBitmap(Bitmap bitmap, float left, float top, Paint paint)
void? drawBitmap(int[] colors, int offset, int stride, int x, int y, int width, int height, boolean hasAlpha, Paint paint)
void? drawBitmap(Bitmap bitmap, Rect src, RectF dst, Paint paint)
void? drawBitmapMesh(Bitmap bitmap, int meshWidth, int meshHeight, float[] verts, int vertOffset, int[] colors, int colorOffset, Paint paint)

void? drawCircle(float cx, float cy, float radius, Paint paint)
void? drawColor(int color)
void? drawColor(int color, PorterDuff.Mode mode)
void? drawLine(float startX, float startY, float stopX, float stopY, Paint paint)
void? drawLines(float[] pts, Paint paint)?
void? drawLines(float[] pts, int offset, int count, Paint paint)
void? drawOval(RectF oval, Paint paint)
void? drawPaint(Paint paint)
void? drawPath(Path path, Paint paint)

void? drawPicture(Picture picture, RectF dst)
void? drawPicture(Picture picture, Rect dst)
void? drawPicture(Picture picture)
void? drawPoint(float x, float y, Paint paint)
void? drawPoints(float[] pts, int offset, int count, Paint paint)
void? drawPoints(float[] pts, Paint paint)
void? drawPosText(char[] text, int index, int count, float[] pos, Paint paint)
void? drawPosText(String text, float[] pos, Paint paint)
void? drawRGB(int r, int g, int b)
void? drawRect(RectF rect, Paint paint)
void? drawRect(float left, float top, float right, float bottom, Paint paint)
void? drawRect(Rect r, Paint paint)
void? drawRoundRect(RectF rect, float rx, float ry, Paint paint)
void? drawText(String text, int start, int end, float x, float y, Paint paint)
void? drawText(char[] text, int index, int count, float x, float y, Paint paint)
void? drawText(String text, float x, float y, Paint paint)
void? drawText(CharSequence text, int start, int end, float x, float y, Paint paint)
void? drawTextOnPath(String text, Path path, float hOffset, float vOffset, Paint paint)
void? drawTextOnPath(char[] text, int index, int count, Path path, float hOffset, float vOffset, Paint paint)
void? drawVertices(Canvas.VertexMode mode, int vertexCount, float[] verts, int vertOffset, float[] texs, int texOffset, int[] colors, int colorOffset, short[] indices, int indexOffset, int indexCount, Paint paint)
static void? freeGlCaches()
boolean? getClipBounds(Rect bounds)
final Rect? getClipBounds()
int? getDensity()?
DrawFilter? getDrawFilter()?
GL? getGL()
int? getHeight()
void? getMatrix(Matrix ctm)
final Matrix? getMatrix()
int? getSaveCount()
int? getWidth()
boolean? isOpaque()
boolean? quickReject(Path path, Canvas.EdgeType type)
boolean? quickReject(float left, float top, float right, float bottom, Canvas.EdgeType type)
boolean? quickReject(RectF rect, Canvas.EdgeType type)
void? restore()
void? restoreToCount(int saveCount)
final void? rotate(float degrees, float px, float py)
void? rotate(float degrees)
int? save()
int? save(int saveFlags)
int? saveLayer(float left, float top, float right, float bottom, Paint paint, int saveFlags)
int? saveLayer(RectF bounds, Paint paint, int saveFlags)
int? saveLayerAlpha(float left, float top, float right, float bottom, int alpha, int saveFlags)
int? saveLayerAlpha(RectF bounds, int alpha, int saveFlags)
final void? scale(float sx, float sy, float px, float py)
void? scale(float sx, float sy)
void? setBitmap(Bitmap bitmap)
void? setDensity(int density)?
void? setDrawFilter(DrawFilter filter)?
void? setMatrix(Matrix matrix)
void? setViewport(int width, int height)
void? skew(float sx, float sy)
void? translate(float dx, float dy)


五、android.graphics.Color

?有关Android平台上表示颜色的方法有很多种,Color提供了常规主要颜色的定义比如Color.BLACK和Color.GREEN等等,我们平时创建时主要使用以下静态方法

static int argb(int alpha, int red, int green, int blue)? 构造一个包含透明对象的颜色
static int rgb(int red, int green, int blue)? 构造一个标准的颜色对象
static int parseColor(String colorString)? 解析一种颜色字符串的值,比如传入Color.BLACK

?本类返回的均为一个整形类似 ?绿色为0xff00ff00,红色为0xffff0000。我们将这个DWORD型看做AARRGGBB,AA代表Aphla透明色,后面的就不难理解,每个分成WORD整好为0-255。

发表评论
用户名: 匿名