android应用程序界面UI详解(3)

2019-03-22 16:10

Android UI开发专题(三) 各种Drawable

本次我们主要讲解Android平台下的各种Drawable,这里在SDK的

android.graphics.drawable包下面可以看到有各种Drawable类多达十几种,它们到底之间有什么关系和区别呢?

一、AnimationDrawable

顾名思义该类主要表示动画的图形类,可以实现逐帧播放的效果,下面代码示例如下

1. 定义一个cwj_animation.xml 放到res/drawable 目录下,其中定义的属性duration为延时,单位为毫秒,而oneshot属性表示是否仅播放一次,内容为: 1

3

4

5

6

7

8 9 10

2.在java中调用也很简单

ImageView img = (ImageView)findViewById(R.id.cwj_image); //首先声明一个ImageView对象在xml布局文件中

img.setBackgroundResource(R.drawable.cwj_animation); //我们刚才的animation定义的xml文件

AnimationDrawable frameAnimation = (AnimationDrawable) img.getBackground(); //构造AnimationDrawable对象 frameAnimation.start() //开始播放动画

3. AnimationDrawable类还提供了一些常用的方法如下: void stop() 停止

void addFrame(Drawable frame, int duration) 添加一帧,类似xml中的布局 Drawable getFrame(int index) 返回某帧的Drawable图形 int getNumberOfFrames() 返回总共动画帧数 boolean isOneShot() 是否仅播放一次 boolean isRunning() 是否正在播放

二、BitmapDrawable

在Android平台中对于缩放、变形的Bitmap对象由BitmapDrawable类表示,其构造方法也很简单,由于该类继承于android.graphics.drawable.Drawable,相对Drawable而言提供了更多的有关位图的操作方法,主要的构造方法如下:

BitmapDrawable() //直接构造一个空的对象,这样方式不推荐使用,SDK标记为deprecated.未来可能无法使用。

BitmapDrawable(Resources res) //从资源中构造

BitmapDrawable(Bitmap bitmap) //从Bitmap对象直接构造,但也是不推荐,而是希望用下一种

BitmapDrawable(Resources res, Bitmap bitmap) //从bitmap中创建设置初始的分辨率从res中

BitmapDrawable(String filepath) //从具体文件路径构造,也不推荐使用,而是下一种更好

BitmapDrawable(Resources res, String filepath) //同上

BitmapDrawable(InputStream is) //从输入流中构造,同样推荐下面的方法 BitmapDrawable(Resources res, InputStream is) //同上

在BitmapDrawable类中相对于Drawable类主要新增了以下几种方法,均比较实用:

final Bitmap getBitmap() 获取一个Bitmap对象 int getOpacity() //获取透明度

void setAntiAlias(boolean aa) //是否抗锯齿

void setTargetDensity(Canvas canvas) //设置目标Canvas密度 void setTargetDensity(DisplayMetrics metrics)

三、ClipDrawable

ColorDrawable Drawable GradientDrawable InsetDrawable LayerDrawable LevelListDrawable NinePatchDrawable PaintDrawable PictureDrawable RotateDrawable ScaleDrawable

ShapeDrawable StateListDrawable TransitionDrawable

以上的类型在常见的开发一般较少出现,主要是基类构造使用,Android内部的多个Widget基础控件使用了,感兴趣的网友可以查看开源GIT中的相关内容。

Android UI开发专题(四) View自绘控件

很多时候想要设计漂亮的Android UI,使用Android自带的控件无法满足我们的需要就要考虑自绘控件,在Android界面显示类View,可以通过继承扩展重写相关方法来实现我们的图形绘制。

首先我们需要了解下View类的底层实现,在SDK中我们可以看到View直接继承于Java的基类Object,实现了图形绘制和按键事件Drawable.Callback

KeyEvent.Callback的相关方法,我们自绘时主要实现其内部的onDraw方法,相关的界面计算可以重写onMeasure方法,对于相关的按键可以重载onKeyDown、onKeyUp以及onTouchEvent等,下面android开发网就以一个实例来表示。 public class cwjView extendsView {

public cwjView(Context context) {

this(context,null); }

public cwjView(Context context,AttributeSet attrs) {

this(context,attrs,0); }

public cwjView(Context context,AttributeSet attrs,int defStyle) {

super(context,attrs,defStyle);

//这里是本类的构造,相关初始化可以在这里添加代码 }

@Override

protectd void onDraw(Canvas canvas) {

super(canvas);

//绘图的关键,可以看到已经包含了一个canvas句柄,可以直接通过我们前面讲到的Canvas类进行相关的操作,完整的例子,大家可以参考Android SDK中例子Snake贪食蛇游戏的实现。 } }

有关View类的更新,我们直接通过调用invalidate(int l,int r,int r,int b)来更新一个Rect矩形区域,或更新全部,同时在线程中我们使用需要调用postInvalidate来更新界面。

Android UI开发(五)Bitmap和Canvas实例

在Android UI开发专题的前五节我们讲到的东西主要是基础和理论内容,从本次Android123将通过实例代码来演示,本次主要是Bitmap和Canvas类的使用,根据要求缩放Bitmap对象并返回新的Bitmap对象。centerToFit方法一共有4个参数,返回一个Bitmap类型,第一个参数为原始的位图对象,width和height分别为新的宽和高,而Context是用来加载资源的上下文实例。

1 Bitmap centerToFit(Bitmap bitmap, int width, int height, Context context) { 2

3 final int bitmapWidth = bitmap.getWidth(); //获取原始bitmap的宽度 4

5 final int bitmapHeight = bitmap.getHeight(); 6

7 if (bitmapWidth < width || bitmapHeight < height) { 8


android应用程序界面UI详解(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:福安市博物馆·历史展厅前言、结束语

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: