2014-10-19 67 views
1

我有一個表格佈局,看起來像帶圓形按鈕的數字小鍵盤(按鈕是帶有圓形背景的文本視圖)。現在我想要在整個鍵盤上應用漸變。但我希望漸變僅在按鈕上可見。按鈕周圍的空間應該是白色的。有什麼辦法通過xml實現它嗎?在多個視圖上應用漸變

回答

0

更新: 是的,我可以想出一種方法來在XML中做到這一點。在背景佈局上設置漸變。然後用一個需要的大小的透明圓圈創建一個九色塊可繪製圖像,並在其周圍形成白色填充,並在每個邊緣周圍定義一個小的九個修補程序(以便圓圈不會被拉伸)。

將TextView背景設置爲你的九個補丁,並確保網格單元拉伸,以適應整個表格佈局(所以白色邊緣合併在一起。

原始回答: 我想不出一個簡單的方法來做到這一點,絕對不是在XML。您可能需要創建一個擴展Drawable類的類,以便您可以重寫onDraw方法。您需要創建一個RadialGradient(着色器,而不是Drawable),然後每個按鈕將創建一個着色器設置爲通用着色器。

然後,當您繪製每個按鈕時,您需要查看該按鈕的y值,將畫布轉換爲-y量,然後使用着色器繪製一個圓圈(canvas.drawCircle(..) 。這應該將圓圈放在屏幕上的同一位置,顏色漸變映射爲漸變繪製在整個頁面上,但僅在按鈕處可見。

+2

感謝您的回答。你的兩個答案都適合我的需求。我遵循第二種方法。但我沒有使用着色器。我將線性漸變應用於表格佈局的背景。然後我擴展了textview類在畫布上繪製一個白色的矩形,並使用透明的油漆,我在中心畫了一個圓。然後,我在我的表格行中使用這個類來處理我的文本視圖。 – 2014-10-19 12:30:41

0

將背景顏色設置爲整個佈局的白色。並應用梯度每個按鈕:

保存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" /> 
+1

謝謝薩克的答案。但我不想應用漸變到每個按鈕。如果我這樣做,所有的按鈕看起來都是一樣的。我不想那樣。如果你明白我的意思。 – 2014-10-19 06:33:59

+0

只需在你的[你想要的]按鈕中放置android:background =「@ drawable/gradiant_button」。 – 2014-10-19 07:05:18