Как я могу изменить цвет кнопки при ее касании в прокрутке?

Я пытаюсь создать прокрутку, содержащую 3 кнопки, и я хочу, чтобы эти три кнопки меняли цвет при касании; однако, когда я пытался установить onTouchListener, кнопка при касании меняла цвет, но когда я поднимал палец , не изменилось. В любом случае я могу это сделать?

Вот пример прослушивателя onTouch и onClick, который у меня есть:

callButton.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_DOWN) {
            callButton.setBackgroundColor(Color.parseColor("#b20000"));
        } else if (event.getAction() == MotionEvent.ACTION_UP) {
            callButton.setBackground(getDrawable(R.drawable.buttonshape1));
        }

        return false;
    }
});

callButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        String phno = "314-605-4110";
        Intent intent = new Intent(Intent.ACTION_CALL);
        intent.setData(Uri.parse("tel:" + phno));
        startActivity(intent);
    }
});

А вот мой XML для прокрутки:

      <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
       xmlns:tools="http://schemas.android.com/tools"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       tools:context="com.google.helpstl2.VariableLocation">
       <ScrollView
           android:layout_width="match_parent"
           android:layout_height="match_parent"
           >

           <RelativeLayout
               android:layout_width="fill_parent"
               android:layout_height="wrap_content" android:orientation="vertical">


               <Button
                   android:id="@+id/callButton"
                   android:textAllCaps="false"
                   android:text="Give us a call "
                   android:textColor="#4E4E4E"
                   android:textSize="15sp"
                   android:background="@drawable/buttonshape"
                   android:gravity="center_vertical|center_horizontal"
                   android:paddingLeft="130dp"
                   android:paddingRight="130dp"
                   android:drawablePadding="-8dp"
                   android:layout_width="match_parent"
                   android:layout_height="47dp"
                   android:layout_below="@+id/imageOverlay"

                   android:onClick="phoneClick"
                   android:layout_alignParentLeft="true"
                   android:layout_alignParentStart="true"
                   android:layout_alignParentRight="true"
                   android:layout_alignParentEnd="true" />




               <LinearLayout
                   android:layout_width="wrap_content"
                   android:layout_height="wrap_content"
                   android:background="@drawable/mapbackground"

                   android:id="@+id/mapLay"


                   android:layout_alignParentRight="true"
                   android:layout_alignParentEnd="true"
                   android:layout_below="@+id/callButton"
                   android:weightSum="1"
                   android:layout_alignParentLeft="true"
                   android:layout_alignParentStart="true"
                   android:layout_marginLeft="12dp"
                   android:layout_marginRight="12dp"
                   android:layout_marginTop="9dp">


                   <fragment
                       android:layout_width="match_parent"
                       android:layout_height="220dp"
                       android:name="com.google.android.gms.maps.MapFragment"
                       android:id="@+id/placeMap"
                       android:background="@drawable/mapbackground"
                       android:layout_alignParentLeft="true"
                       android:layout_alignParentStart="true"
                       android:layout_gravity="center_vertical"


                       android:duplicateParentState="true"
                       android:layout_margin="2dp"
                       android:layout_marginBottom="50dp" />
               </LinearLayout>

               <Button
                   android:id="@+id/directionsButton"
                   android:textAllCaps="false"
                   android:text="Come see us"
                   android:textColor="#000000"
                   android:textSize="14sp"
                   android:paddingLeft="10dp"
                   android:gravity="center_vertical"
                   android:drawablePadding="10dp"

                   android:layout_width="match_parent"
                   android:layout_height="44dp"
                   android:background="@drawable/buttonshape1"

                   android:onClick="directionsClick"
                   android:singleLine="false"
                   android:layout_marginTop="9dp"
                   android:layout_below="@+id/mapLay"
                   android:layout_alignParentLeft="true"
                   android:layout_alignParentStart="true"
                   android:layout_marginLeft="12dp"
                   android:layout_marginRight="12dp" />

               <Button
                   android:id="@+id/moreInfoButton"
                   android:textAllCaps="false"
                   android:text="More Info"
                   android:textColor="#000000"
                   android:textSize="14sp"
                   android:gravity="center_vertical"
                   android:paddingLeft="10dp"
                   android:drawablePadding="10dp"
                   android:layout_width="match_parent"
                   android:layout_height="44dp"
                   android:background="@drawable/buttonshape2"
                   android:onClick="directionsClick"
                   android:singleLine="false"
                   android:layout_below="@+id/directionsButton"
                   android:layout_alignParentLeft="true"
                   android:layout_alignParentStart="true"
                   android:layout_marginLeft="12dp"
                   android:layout_marginRight="12dp" />




           </RelativeLayout>
       </ScrollView>


   </RelativeLayout>

person Jacob Platin    schedule 06.05.2015    source источник
comment
Каков результат? Меняется только при удержании?   -  person Nabin    schedule 06.05.2015
comment
@ Набин, когда я касаюсь кнопки и отпускаю палец, кнопка не возвращается к своему первоначальному цвету.   -  person Jacob Platin    schedule 06.05.2015


Ответы (2)


Если вы хотите навсегда изменить цвет, вам следует просто удалить реализацию View.TouchListener и сделать это нажатием кнопки, например

callButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        callButton.setBackgroundColor(Color.parseColor("#b20000"));
    }
});

Если вы хотите изменить цвет только при нажатии кнопки, вы должны сделать это в Drawable (@drawable/buttonshape). Например, этот элемент меняет цвет на синий при нажатии.

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" >
        <shape><solid android:color="@color/blue" /></shape>
    </item>
    <item>
        <shape><solid android:color="@color/white"/></shape>
    </item>
</selector>

Вы не должны реализовывать onTouchListener для этого.

person inmyth    schedule 06.05.2015
comment
Здравствуйте, спасибо за ваш ответ, но когда я попробовал ваш второй метод без прослушивателя onTouch, кнопка уже изменила цвет при загрузке активности. - person Jacob Platin; 06.05.2015
comment
У вас уже есть фоновые рисунки, называемые buttonshape для каждой кнопки. Как ты их кодировал? Внутри них уже закодированы цвета состояния? - person inmyth; 06.05.2015
comment
Спасибо, мне просто нужно было скопировать ваш код и заменить мой существующий код. - person Jacob Platin; 07.05.2015

Создайте этот selector_button.xml в своем чертеже:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!--button color pressed -->
<item android:drawable="@android:color/black" android:state_pressed="true"></item>
<!--button color normal -->
<item android:drawable="@android:color/transparent"></item></selector>

И ваш макет кнопки:

 <Button
    android:id="@+id/bt"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/selector_button"
    android:text="abc"
/>
person YenMinh    schedule 06.05.2015
comment
Спасибо за ваш ответ, но когда я попробовал ваш метод без прослушивателя onTouch, кнопка уже изменила цвет при загрузке действия. - person Jacob Platin; 06.05.2015