簡體   English   中英

我怎樣才能為9補丁圖像着色?

[英]How can I tint a nine-patch image?

我已經學會了如何通過添加OnTouchListener來對圖像進行着色,其中我在圖像上調用了setColorFilter。

我已經學會了如何使用九個補丁圖像作為按鈕和ImageButton的背景。

問題是,如果九路徑圖像是ImageButton的src,則它們不會拉伸,並且色調對背景圖像沒有影響。

如何按下九個補丁的ImageButton? 有什么建議么?

我知道這是一個古老的問題,但它似乎是這個話題中唯一的問題。

您可以通過創建包含九個補丁節點和一個色調節點的xml資源文件來為九個補丁映像着色。 示例:

<?xml version="1.0" encoding="utf-8"?>
<nine-patch xmlns:android="http://schemas.android.com/apk/res/android"
        android:src="@drawable/nine_patch_image"
        android:tint="@android:color/black"/>

然后,您可以在后台屬性中引用此文件:

<LinearLayout
    android:id="@+id/some_id"
    android:background="@drawable/xml_filename">

希望這會對某人有所幫助

所以我遲了3年但我找到了辦法。 (我正在使用Xamarin,所以借口我想念的任何C#格式)

@Override
protected void onDraw(Canvas canvas)
    {
        NinePatchDrawable bg = (NinePatchDrawable)getResources().getDrawable(R.Drawable.whatev);
        bg.setBounds(0, 0, getWidth(), getHeight());
        bg.setColorFilter(new PorterDuffColorFilter(color, PorterDuff.Mode.MULTIPLY));
        bg.draw(canvas);
        base.onDraw(canvas);
    }

另一種選擇是使用backgroundTint(在API21及更高版本上可用):

            <TextView
            android:id="@+id/chat_bubble_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@drawable/left_bubble"
            android:backgroundTint="@color/main_color"
            android:gravity="center_vertical"
            android:minWidth="200dp"
            android:textColor="@android:color/white"
            android:visibility="visible"
            tools:text="message" />

我找到了一種方法可以解決這個問題。 使用純灰度,半透明-9-補丁圖像作為按鈕背景,包裝在具有你的着色顏色背景這樣一個視圖組的按鈕:

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="#F00"
    android:orientation="vertical" >
    <Button
        android:id="@+id/my_butt"
        android:background="@drawable/my_semi_transparent_gray_9_patch"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="I'm a tinted 9-patch button!" />
</LinearLayout>

主要問題是,如果您的圖像具有透明邊緣,則色調顏色將顯示您不想要的位置,但如果您的圖像邊緣使用完全不透明的顏色,該顏色與您放置此物體的任何容器的背景相匹配,則可能運作得很好。 您可能還需要編寫自己的選擇器,為您關注的每個狀態更改這些背景顏色。 我不推薦這種方法,但也許它可以幫助某人。 我同意很遺憾,9色補丁設計中沒有內置着色,因為保持一堆相同的圖像僅僅在色彩上有所不同感覺很愚蠢,特別是當你將它乘以許多不同的可繪制尺寸時。 更好的是Android本身支持SVG。 我已經修改了開源“svg-android”庫,因此使用正確的藝術我只需要一個可以根據需要拉伸和着色的圖像。

我認為通過為每個按鈕狀態創建單獨的資源可以獲得更好的結果。 例如,您可以制作一個可繪制的xml文件,如下所示:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/btn_pressed" 
        android:state_pressed="true" />
    <item android:drawable="@drawable/btn_focused"
        android:state_pressed="false"
        android:state_focused="true" />
    <item android:drawable="@drawable/btn_default"
        android:state_focused="false"
        android:state_pressed="false" />
</selector>

然后為您的按鈕創建一個樣式,如下所示:

<style name="PushButton">
    <item name="android:background">@drawable/btn</item>
</style>

然后你應該能夠設置圖像按鈕的樣式並將src設置為你想要的任何圖像。

<ImageButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/icon"
        style="@style/PushButton" />

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM