StackDoc

StackDoc

當前位置: 主頁 > JAVA編程 > 網络編程 >

Android畫圖學習總結(三)——Drawable

時間:2011-09-28 20:26來源:Internet 作者:Internet 點擊:
Android SDK提供了一個強大的類Drawable,Drawable這個抽象類到底代表了什麼,如何使用?Drawable是個很抽象的概念,通過簡單的例子程序來學習它,理解它。先看個簡單的例子,使

Android SDK提供了一個強大的類Drawable,Drawable這個抽象類到底代表了什麼,如何使用?Drawable是個很抽象的概念,通過簡單的例子程序來學習它,理解它。先看個簡單的例子,使用Drawable的子類ShapeDrawable來畫圖,如下:
public class testView extends View {
private ShapeDrawable mDrawable;
public testView(Context context) {
super(context);
int x = 10;
int y = 10;
int width = 300;
int height = 50;
mDrawable = new ShapeDrawable(new OvalShape());
mDrawable.getPaint().setColor(0xff74AC23);
mDrawable.setBounds(x, y, x + width, y + height);
}
protected void onDraw(Canvas canvas)
super.onDraw(canvas);
canvas.drawColor(Color.WHITE);//畫白色背景
mDrawable.draw(canvas);
}
}
程序的運行結果,顯示如下:

ShapDrawable 簡要解析:

  1. 創建一個OvalShape(一個橢圓);
  2. 使用剛創建的OvalShape構造一個ShapeDrawable對象mDrawable
  3. 設置mDrawable的顏色;
  4. 設置mDrawable的大小;
  5. 將mDrawable畫在testView 的畫布上;

這個簡單的例子可以幫我們理解什麼是Drawable,Drawable就是一個可畫的對象,其可能是一張位圖(BitmapDrawable),也可能是一個圖形(ShapeDrawable),還有可能是一個圖層(LayerDrawable),我們根據畫圖的需求,創建相應的可畫對象,就可以將這個可畫對象當作一塊“畫布(Canvas)”,在其上面操作可畫對象,並最終將這種可畫對象顯示在畫布上,有點類似於“內存畫布“。

上面只是一個簡單的使用Drawable的例子,完全沒有體現出Drawable的強大功能。Android SDK中說明了Drawable主要的作用是:在XML中定義各種動畫,然後把 XML當作Drawable資源來讀取,通過Drawable顯示動畫。下面舉個使用TransitionDrawable 的例子,創建一個Android工程,然後再這個工程的基礎上修改,修改過程如下:
1、去掉layout/main.xml中的TextView,增加ImagView,如下:
<ImageView
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:tint=”#55ff0000″
android:src=”@drawable/my_image”/>

2、創建一個XML文件,命名为expand_collapse.xml,內容如下:
<?xml version=”1.0″ encoding=”UTF-8″?>
<transition xmlns:android=”http://schemas.android.com/apk/res/android”>
<item android:drawable=”@drawable/image_expand”/>
<item android:drawable=”@drawable/image_collapse”/>
</transition>
需要3張png圖片,存放到res\drawable目錄下,3張圖片分別命名为:my_image.png、image_expand.png、image_collapse.png。

3、修改Activity中的代碼,內容如下:
LinearLayout mLinearLayout;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mLinearLayout = new LinearLayout(this);
ImageView i = new ImageView(this);
i.setAdjustViewBounds(true);
i.setLayoutParams(new Gallery.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
mLinearLayout.addView(i);
setContentView(mLinearLayout);
Resources res = getResources();
TransitionDrawable transition =
(TransitionDrawable) res.getDrawable(R.drawable.expand_collapse);
i.setImageDrawable(transition);
transition.startTransition(10000);
}

4、如果修改的沒有錯誤,運行程序,結果顯示如下:
初始圖片
TransitionDrawable-begin
過渡中的圖片
TransitionDrawable-mid
最後的圖片
TransitionDrawable-end

屏幕上動畫顯示的是: 從圖片image_expand.png過渡到image_collapse.png,也就是我們在expand_collapse.xml中定義的一個transition動畫。看完這個例子,你對Drawable的理解是否又深入些?這裏提供這個程序的源代碼,供大家下載,可以在這個例子的基礎上去體會其他的Drawable,來加深對Drawable的理解。

總結說明

通過以上2個例子程序,相信對Drawable會有一定的認識了,在以後的篇幅中會介紹更多的例子,更加深入的學習和理解Drawable。具體還有哪些Drawable,大家到Android SDK去深入學習吧。


From:moandroid.com
頂一下
(0)
0%
踩一下
(0)
0%
------分隔線----------------------------
發表評論
請自覺遵守互聯網相關的政策法規,嚴禁發布色情、暴力、反動的言論。
評價:
表情:
驗證碼:點擊我更換圖片
欄目列表
推薦內容