Android基礎學習,使用Drawable資源之ClipDrawable資源,實現圖片在特定位置展開。
阿新 • • 發佈:2019-02-15
ClipDrawable代表從其它點陣圖上擷取一個"圖片片段",XML中的根元素為<clip.../>,擷取的方向由clipOrientation控制
下面以一個慢慢展開的圖片為例
ClipDrawable代表從其它點陣圖上擷取一個“圖片片段”。在XML檔案中使用<clip.../>元素定義ClipDrawable物件,可指定如下三個屬性:
android:drawable:指定擷取的源Drawable物件
android:clipOrientation:指定擷取的方向,可設定為水平擷取或垂直擷取
android:gravity:指定擷取時的對齊方式
使用ClipDrawable物件時可以呼叫setLevel(int level)方法來設定擷取的區域大小,當level為0時,擷取的圖片片段為空;當level為10000時,擷取整張圖片。
通過以上說明,我們發現,可以使用ClipDrawable的這種性質控制擷取圖片的區域大小,讓程式不斷呼叫setLevel方法並改變level的值,達到讓圖片慢慢展開的效果。
1.先定義一個ClipDrawable資原始檔drawable_clip.xml 效果是從中間向兩邊展開
<?xml version="1.0" encoding="utf-8"?> <clip xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/test" android:clipOrientation=2.在主Activity的佈局檔案中新增ImageView ,名稱activity_mian"horizontal" android:gravity="center"> </clip>
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation=3.0 主Activity程式碼 MainActivity"vertical"> <!-- 這裡imageView的src定義為clipdrawable資源 --> <ImageView android:id="@+id/image" android:layout_width="fill_parent" android:layout_height="wrap_content" android:src="@drawable/drawable_clip"/> </LinearLayout>
package com.wuzhou.clipdrawabletest; import android.graphics.drawable.ClipDrawable; import android.os.Handler; import android.os.Message; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.ImageView; import java.util.Timer; import java.util.TimerTask; public class MainActivity extends AppCompatActivity { private ImageView imageView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imageView = (ImageView) findViewById(R.id.image); //獲取圖片所顯示的ClipDrawble物件 final ClipDrawable clipdrawable = (ClipDrawable) imageView.getDrawable();/** * Handler * */ final Handler handler = new Handler() { public void handleMessage(Message msg) { if (msg.what == 0x1233) { //修改ClipDrawable的level值 clipdrawable.setLevel(clipdrawable.getLevel() + 200); } } }; /** * 計時器 * */ final Timer timer = new Timer(); timer.schedule(new TimerTask() { public void run() { Message msg = new Message(); msg.what = 0x1233; //傳送訊息,通知應用修改ClipDrawable物件的level值 handler.sendMessage(msg); //取消定時器 if (clipdrawable.getLevel() >= 10000) { timer.cancel(); } } }, 0, 300); } }4.0 如果在佈局activity_main中圖片的顯示方式是
android:background="@drawable/drawable_clip"
則
//獲取圖片所顯示的ClipDrawble物件 final ClipDrawable clipdrawable = (ClipDrawable) imageView.getBackground();
這種方式。