2011-05-23 100 views
3

我試圖改變一些Android組件的形狀,如Button或View。我能做的是用onDraw-Method爲背景分配一個形狀。那麼,它看起來像重塑,但觸摸事件仍然會超出我定義的形狀。有沒有任何可行的方法來排除我的形狀之外的觸摸?當然,我可以檢查鼠標事件的每個位置,但對於更復雜的形狀,我不知道如何檢查點是否在形狀內。 感謝您的回覆。Android完全成形按鈕

西蒙

回答

2

可以在XML (as you can see here)定義形狀。 例如:

繪製/ sample_shape.xml:

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 
    <gradient 
     android:startColor="#FFFF0000" 
     android:endColor="#80FF00FF" 
     android:angle="45"/> 
    <padding android:left="7dp" 
     android:top="7dp" 
     android:right="7dp" 
     android:bottom="7dp" /> 
    <corners android:radius="8dp" /> 
</shape> 

然後你可以使用XML描述爲一個ImageButton可繪製。

繪製/ samplebutton.xml:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true" 
     android:drawable="@drawable/sample_shape" /> <!-- pressed --> 
    <item android:state_focused="true" 
     android:drawable="@drawable/sample_shape" /> <!-- focused --> 
    <item android:drawable="@drawable/sample_shape" /> <!-- default --> 
</selector> 
在layoutfile

<ImageButton 
    android:layout_height="wrap_content" 
    android:layout_width="wrap_content" 
    android:background="@drawable/samplebutton"> 
</ImageButton> 
+1

當然,我能做到這樣。但主要問題保持不變。如果我定義了一個cricular形狀,我不希望它在我的形狀之外觸摸。對於你的例子,它可以在圈外觸摸。 – Simon 2011-05-23 10:10:49

+0

好吧,我認爲ImageButton類爲你做,但它沒有。對不起。 – 2011-05-23 10:38:09