이미지 중첩

8915 단어 AndroidJava

그림을 겹쳐서 보여주고 싶은 거 있죠?


예를 들어, 아이콘에 New 플래그를 추가하거나 리본에 이미지를 중첩하려는 욕구를 나타냅니다.
e.g.

twitter.및 png

new.pg(사이즈를 50x50으로 조정)를 함께 조정

라고 말했다.
icons via
http://designdeck.co.uk/a/1212/Shiny-Twitter-Icon-with-PSD
http://findicons.com/icon/177290/label_new_red?id=177560

XML로 정의된 Layer Drawable


리소스 이미지의 경우 Layer Drawable을 XML로 정의합니다.
twitter_merge.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:id="@+id/twitter">
        <bitmap android:src="@drawable/twitter" />
    </item>
    <item android:id="@+id/new_icon">
        <bitmap android:src="@drawable/new_icon" />
    </item>
</layer-list>
그런데 이렇게 되면...

뜻대로 되지 않다.
안에 있는 비트맵에Gravity를 설정해야 합니다.
twitter_merge.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >

    <item android:id="@+id/twitter">
        <bitmap android:src="@drawable/twitter" />
    </item>
    <item android:id="@+id/new_icon">
        <bitmap
            android:gravity="top|left"
            android:src="@drawable/new_icon" >
        </bitmap>
    </item>

</layer-list>
당분간

라고 표현했다.
또한 item 요소의left,top,right,bottom 각 요소에 여유를 설정할 수 있다.
twitter_merge.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >

    <item android:id="@+id/twitter">
        <bitmap android:src="@drawable/twitter" />
    </item>
    <item
        android:id="@+id/new_icon"
        android:left="50dp">
        <bitmap
            android:gravity="top|left"
            android:src="@drawable/new_icon" >
        </bitmap>
    </item>

</layer-list>

새 아이콘은 왼쪽에서 50dp까지의 위치에 표시됩니다.

코드 설정


자바 코드로 설정할 때 이런 느낌이에요.
Context appContext = getApplicationContext();
ImageView image = new ImageView(appContext);
BitmapDrawable newIcon = (BitmapDrawable) getResources().getDrawable(R.drawable.new_icon);
newIcon.setGravity(Gravity.LEFT | Gravity.TOP);
Drawable[] drawables = {
        getResources().getDrawable(R.drawable.twitter),
        newIcon
};
LayerDrawable ld = new LayerDrawable(drawables);
image.setImageDrawable(ld);
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(WC, WC);
lp.addRule(RelativeLayout.ALIGN_TOP | RelativeLayout.ALIGN_LEFT);
mRootLayout.addView(image, lp);
하지만 XML처럼 특정 항목에 여유를 설정하는 방법은...

ForegroundImageView 사용


Foreground ImageView라는 제이크 신이 공개한 반이 있어요.
이것은 소개 문장이다.
http://qiita.com/yyaammaa/items/30fa39f39a461d59418e
그런데 대부분의 경우 Layer Drawarble이면 충분한가요?
ForegroundImageView를 만든 경과를 알고 싶은데...

좋은 웹페이지 즐겨찾기