2016-12-13 62 views
1

編輯:不同的背景顏色之間按下和釋放與XML?

爲了使它真的清楚我在找什麼,這裏正是我想要的。

當用戶按住按鈕(手指仍在屏幕上)時,我希望它顯示一種顏色(例如默認的Android半透明漣漪效果),然後根據用戶是否完成點擊(如果它們當它在按鈕上時擡起手指,Android會將其註冊爲點擊,如果他們的手指移動到按鈕的邊界之外並且然後擡起他們的手指,則Android將不會將其註冊爲點擊)我希望它顯示不同的顏色。

我正在尋找將使按鈕執行此操作的xml代碼。

當按住時,顯示默認的Android連鎖反應(簡單),如果用戶完成點擊,顯示綠色連鎖反應確認。如果用戶沒有完成點擊,那麼按住按鈕的用戶的漣漪應該消失。

到目前爲止,這裏或其他問題的XML解決方案都沒有這樣做。所以我可能不得不在onTouchListener中手動執行此操作。

============================================== ========================

我想創建一個漣漪效應狀態列表drawable爲我的按鈕,我無法弄清楚如何要讓按鈕被按住時,波紋是一種顏色,那麼如果用戶通過鬆開按鈕來完成按鈕的按下,波紋就是另一種顏色。

現在,我的波紋顏色是相同的時候按下,當按鈕被釋放。

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android" android:enterFadeDuration="200" android:exitFadeDuration="200"> 
<item android:state_pressed="false"> 
    <shape android:shape="oval"> 
     <solid android:color="@android:color/transparent" /> 
    </shape> 
</item> 

<item android:state_pressed="true"> 
    <shape android:shape="oval"> 
     <solid android:color="@color/md_teal_500" /> 
    </shape> 
</item> 
</selector> 

有沒有辦法做到這一點使用的狀態列表繪製XML或我將有一個觸摸監聽器手動做到這一點?

+0

你想要什麼其他方式或任何工作國王的方式? –

回答

0

可以使用實現代碼相同的:

int[] attrs = new int[]{R.attr.selectableItemBackground}; 
TypedArray typedArray = getActivity().obtainStyledAttributes(attrs); 
int backgroundResource = typedArray.getResourceId(0, 0); 
myView.setBackgroundResource(backgroundResource); 

F你要自定義的連鎖反應到視圖,您需要創建一個新的XML文件,可繪製目錄內。

以下是幾個例子:

實施例1:一個無界紋波

<ripple xmlns:android="http://schemas.android.com/apk/res/android" 
    android:color="#ffff0000" /> 

實施例2:紋波與掩模和背景顏色

<ripple android:color="#7777777" 
    xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:id="@android:id/mask" 
     android:drawable="#ffff00" /> 
    <item android:drawable="@android:color/white"/> 
</ripple> 

實施例3:頂部的波紋可繪製資源

<ripple xmlns:android="http://schemas.android.com/apk/res/android" 
    android:color="#ff0000ff"> 
    <item android:drawable="@drawable/my_drawable" /> 
</ripple> 

用法:要將紋波XML文件附加到任何看法,將其設置爲背景如下:假設你的紋波文件名爲my_ripple.xml。

<View 
    android:id="@+id/myViewId" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:background="@drawable/my_ripple" /> 
+0

我已經知道如何使用drawables了。我想要的是按下按鈕和視圖之間有一個不同的波紋顏色與釋放時相比。我想知道是否有辦法做到這一點只使用狀態列表drawables,而不必手動做一個觸摸監聽器。 –

3

在可繪製文件夾下創建xml文件。 buttonnorml.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="oval"> 
    <corners android:radius="2dp" /> 
    <solid 
     android:width="2px" 
     android:color="@color/green" /> 
</shape> 

buttonselected.xml:

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="oval"> 
    <corners android:radius="2dp" /> 
    <solid 
     android:width="5px" 
     android:color="@color/red" /> 
</shape> 

buttonclickeffect.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@drawable/buttonselected" android:state_pressed="true" /><!-- pressed --> 
    <item android:drawable="@drawable/buttonnorml" /> <!-- default --> 
</selector> 

使用它作爲按鈕的背景:

<Button 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="@drawable/buttonclickeffect" 
     android:text="sample" /> 
+1

@Ritz Malheur將它標記爲答案,如果它幫助你 –

+0

很高興給你2這個答案!我是Android的新手,3周前在SO上找不到任何有用的東西,不得不清理票據。現在它已經修復了!用文字顏色做同樣的事情的想法? – eric

+0

謝謝@eric ..和雅問它作爲單獨的問題..所以其他人可以幫助你.. –