閱讀290 返回首頁    go 技術社區[雲棲]


LAndroid LayerDrawable層疊樣式layer-list

layer-list可以將多個圖片按照順序層疊起來。 

語法:在drawalbe/drawable-layer.xml中 

<layer-list xmlns:andro>
    <item android:drawable="@android:color/white" />
    <item android:drawable="@drawable/logo_overlay" />
</layer-list>

使用方式像其他圖片一樣: 
如在樣式中引用: 

<resources>
    <style name="LookupTheme" parent="@android:style/Theme.Light.NoTitleBar">
        <item name="android:windowBackground">@drawable/drawable-layer</item>
    </style>
</resources>
在java代碼中引用: 
((ImageView) findViewById(R.id.imageview)).setImageDrawable(getResources().getDrawable(R.drawable.drawable-layer) 

在代碼中實現: 

Resources resources = getResources(); 
Drawable[] layers = new Drawable[2]; 
layers[0] = r.getDrawable(R.drawable.white); 
layers[1] = r.getDrawable(R.drawable.logo_overlay); 
LayerDrawable layerDrawable = new LayerDrawable(layers)
((ImageView) findViewById(R.id.imageview)).setImageDrawable(layerDrawable); 


再舉一個例子: 
要用2張圖片疊加起來,看上去形成一張圖片 



首先創建一個drawalbe/login_head.xml的文件,內容如下: 

<?xml version="1.0" encoding="UTF-8"?>
<layer-list
  xmlns:andro>
    <item android: android:drawable="@drawable/faceback" />
    <item android: android:drawable="@drawable/h001" android:left="10.0dip" android:top="18.0dip" android:right="25.0dip" android:bottom="35.0dip" />
</layer-list>

然後就可以使用這個組合的圖片了,比如在ImageView中顯示: 
<ImageView android: android:background="@drawable/login_head" 
android:layout_width="wrap_content" android:layout_height="wrap_content" /> 

使用java代碼: 
如何使多個Drawable疊加(合成圖片)? 
大家可能知道Bitmap的疊加處理在Android平台中可以通過Canvas一層一層的畫就行了,而Drawable中如何處理呢? 除了使用BitmapDrawable的getBitmap方法將Drawable轉換為Bitmap外,今天Android123給大家說下好用簡單的LayerDrawable類,LayerDrawable顧名思義就是層圖形對象。下麵直接用一個簡單的代碼表示: 

Bitmap bm = BitmapFactory.decodeResource(getResources(),R.drawable.cwj);  
    Drawable[] array = new Drawable[3];  
     array[0] = new PaintDrawable(Color.BLACK); //黑色  
     array[1] = new PaintDrawable(Color.WHITE); //白色     
     array[2] = new BitmapDrawable(bm); //位圖資源          
    LayerDrawable ld = new LayerDrawable(array); //參數為上麵的Drawable數組  
    ld.setLayerInset(1, 1, 1, 1, 1);  //第一個參數1代表數組的第二個元素,為白色  
    ld.setLayerInset(2, 2, 2, 2, 2); //第一個參數2代表數組的第三個元素,為位圖資源  
    mImageView.setImageDrawable(ld); 

上麵的方法中LayerDrawable是關鍵,setLayerInset方法原型為public void setLayerInset (int index, int l, int t, int r, int b) 其中第一個參數為層的索引號,後麵的四個參數分別為left、top、right和bottom。對於簡單的圖片合成我們可以將第一和第二層的PaintDrawable換成BitmapDrawable即可實現簡單的圖片合成。

最後更新:2017-04-02 16:47:37

  上一篇:go android 雙擊圖片放大縮小
  下一篇:go android ListView增加Animation效果