我有一個表格佈局,看起來像帶圓形按鈕的數字小鍵盤(按鈕是帶有圓形背景的文本視圖)。現在我想要在整個鍵盤上應用漸變。但我希望漸變僅在按鈕上可見。按鈕周圍的空間應該是白色的。有什麼辦法通過xml實現它嗎?在多個視圖上應用漸變
回答
更新: 是的,我可以想出一種方法來在XML中做到這一點。在背景佈局上設置漸變。然後用一個需要的大小的透明圓圈創建一個九色塊可繪製圖像,並在其周圍形成白色填充,並在每個邊緣周圍定義一個小的九個修補程序(以便圓圈不會被拉伸)。
將TextView背景設置爲你的九個補丁,並確保網格單元拉伸,以適應整個表格佈局(所以白色邊緣合併在一起。
原始回答: 我想不出一個簡單的方法來做到這一點,絕對不是在XML。您可能需要創建一個擴展Drawable類的類,以便您可以重寫onDraw方法。您需要創建一個RadialGradient(着色器,而不是Drawable),然後每個按鈕將創建一個着色器設置爲通用着色器。
然後,當您繪製每個按鈕時,您需要查看該按鈕的y值,將畫布轉換爲-y量,然後使用着色器繪製一個圓圈(canvas.drawCircle(..) 。這應該將圓圈放在屏幕上的同一位置,顏色漸變映射爲漸變繪製在整個頁面上,但僅在按鈕處可見。
將背景顏色設置爲整個佈局的白色。並應用梯度每個按鈕:
保存gradiant_button.xml到您的應用程序水庫 - >文件夾繪製
gradiant_button.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_pressed="true">
<shape>
<gradient
android:startColor="#454545"
android:endColor="#F0F0F0"
android:angle="270"/>
<stroke
android:width="4dp"
android:color="#B5F6EC"/>
<corners
android:radius="0dp" />
<padding
android:left="0dp"
android:top="0dp"
android:right="0dp"
android:bottom="0dp" />
</shape>
</item>
<item android:state_focused="true">
<shape>
<gradient
android:startColor="#454545"
android:endColor="#F0F0F0"
android:angle="270"/>
<stroke
android:width="4dp"
android:color="#B5F6EC"/>
<corners
android:radius="0dp" />
<padding
android:left="0dp"
android:top="0dp"
android:right="0dp"
android:bottom="0dp" />
</shape>
</item>
<item android:state_enabled="false">
<shape>
<gradient
android:startColor="#454545"
android:endColor="#F0F0F0"
android:angle="270"/>
<stroke
android:width="4dp"
android:color="#B5F6EC"/>
<corners
android:radius="0dp" />
<padding
android:left="0dp"
android:top="0dp"
android:right="0dp"
android:bottom="0dp" />
</shape>
</item>
<item>
<shape>
<gradient
android:startColor="#F0F0F0"
android:endColor="#454545"
android:angle="270"/>
<stroke
android:width="0dp"
android:color="#000000"/>
<corners
android:radius="0dp" />
<padding
android:left="0dp"
android:top="0dp"
android:right="0dp"
android:bottom="0dp" />
</shape>
</item>
</selector>
見我的git REF: https://github.com/iamsarker/android-apps/tree/master/CustomButton
而按鈕xml會是:
<Button
android:id="@+id/btn11"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="3"
android:background="@drawable/gradiant_button"
android:text="@string/btnText" />
謝謝薩克的答案。但我不想應用漸變到每個按鈕。如果我這樣做,所有的按鈕看起來都是一樣的。我不想那樣。如果你明白我的意思。 – 2014-10-19 06:33:59
只需在你的[你想要的]按鈕中放置android:background =「@ drawable/gradiant_button」。 – 2014-10-19 07:05:18
感謝您的回答。你的兩個答案都適合我的需求。我遵循第二種方法。但我沒有使用着色器。我將線性漸變應用於表格佈局的背景。然後我擴展了textview類在畫布上繪製一個白色的矩形,並使用透明的油漆,我在中心畫了一個圓。然後,我在我的表格行中使用這個類來處理我的文本視圖。 – 2014-10-19 12:30:41