[Android アプリの UI デザイン] Layer List の作りかたのまとめと Tips

[Android アプリの UI デザイン] Layer List の作りかたのまとめと Tips

Clock Icon2013.04.09

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Layer List について


Layer List 

layer_list01

使便使
便 Layer List  Tips 

Layer List 


 Layer List 
2 Layer List  Droid 

layer_list02

XML 


XML  layer-list 使 item  item  item  Droid  item 
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >

    <!-- 角丸付きの黒いグラデーションの背景(Shapeで書いてみた) -->
    <item>
        <shape>
            <corners android:radius="10dp"/>
            <gradient
                android:angle="90"
                android:endColor="#606060"
                android:startColor="#323232" />
        </shape>
    </item>

    <!-- Droidくんの画像 -->
    <item
        android:drawable="@drawable/droid"
        android:top="10dp"
        android:bottom="10dp"
        android:left="10dp"
        android:right="10dp"/>

</layer-list>

 Droid  item   top  bottom  left  right 10dp 10dp Droid 
 Drawable  View 
<ImageView
    android:id="@+id/image_view"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/layer_list_sample"
    />

Java 


Java  Layer List 
// LayerDrawable の素材となる Drawable を取得
Resources r = getResources();
Drawable shape = r.getDrawable(R.drawable.shape_sample);
Drawable droid = r.getDrawable(R.drawable.droid);

// LayerDrawable を生成
Drawable[] layers = { shape, droid };
LayerDrawable layerDrawable = new LayerDrawable(layers);

// padding を設定する
int padding = r.getDimensionPixelSize(R.dimen.padding);
layerDrawable.setLayerInset(1, padding, padding, padding, padding);

// View にセットする
ImageView view = (ImageView) findViewById(R.id.image_view);
view.setImageDrawable(layerDrawable);

Layer List  Drawable  LayerDrawable  LayerDrawable  Drawable 
 setLayerInset() 使 Drawable  index 2 Drawable  index 1

Tips 

Layer List  item  Drawable 


 Layer List  item  Drawable  LayerDrawable#setDrawableByLayerId() 使
 ImageView  Layer List  item  Layer List  XML  item  android:id 
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >

    <!-- 角丸付きの黒いグラデーションの背景 -->
    <item>
        <shape>
            <corners android:radius="10dp"/>
            <gradient
                android:angle="90"
                android:endColor="#606060"
                android:startColor="#323232" />
        </shape>
    </item>

    <!-- Droidくんの画像 -->
    <item
        android:id="@+id/droid"
        android:bottom="10dp"
        android:drawable="@drawable/droid"
        android:left="10dp"
        android:right="10dp"
        android:top="10dp"/>

</layer-list>

 OnClickListener#onClick()  LayerDrawable  LayerDrawable#setDrawableByLayerId()  android:id id Drawable  LayerDrawable#invalidateSelf() 
ImageView view = (ImageView) findViewById(R.id.image_view);
LayerDrawable layer = (LayerDrawable) view.getDrawable();

// LayerDrawable の素材となる Drawable を取得
Drawable droid = getResources().getDrawable(R.drawable.droid_blue);
layer.setDrawableByLayerId(R.id.droid, droid);
layer.invalidateSelf();

 Change  Droid 

layer_list03

Android 4.0  invalidateSelf() 


使 LayerDrawable#invalidateSelf() Android 4.0 

layer_list04

 Drawable  Bounds  Drawable 
ImageView view = (ImageView) findViewById(R.id.image_view);
LayerDrawable layer = (LayerDrawable) view.getDrawable();

// LayerDrawable の素材となる Drawable を取得
Drawable droid = getResources().getDrawable(R.drawable.droid_blue);
// 入れ替え前の Drawable から Bounds を取得してセットする
Rect bounds = layer.findDrawableByLayerId(R.id.droid).getBounds();
droid.setBounds(bounds);
layer.setDrawableByLayerId(R.id.droid, droid);
layer.invalidateSelf();

layer_list05


 Layer List  Tips 
使使

参考

この記事をシェアする

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.