Search code examples
javaandroidandroid-imageview

How can I change icon of image view when a button is pressed?


There are 3 imageview in my Android project. It should be changed to icon when button clicked. When release click, it should be default icon. In my code it change icon when click button, but it change icon permanently till click back button from this Activity. It should only replace mainpage_acil_icon_p with mainpage_acil_icon when click button.

How can I solve this problem?

activity_mainpage.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/Linear_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#000000"
        android:orientation="vertical">
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginBottom="10dp"
            android:alpha=".85"
            android:background="@drawable/mainpage_background"
            android:orientation="vertical"
            android:weightSum="60">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="0dip"
                android:layout_weight="40"
                android:orientation="vertical">
                <TextView
                    android:id="@+id/textView2"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:text="EMAS"
                    android:textAlignment="center"
                    android:textColor="@color/colorWhite"
                    android:textSize="18sp"
                    android:textStyle="bold" />
            </LinearLayout>
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="0dip"
                android:layout_weight="20"
                android:orientation="vertical">
                <View
                    android:layout_width="match_parent"
                    android:layout_height="1dp"
                    android:background="#c7c7c8"/>

                <include layout="@layout/mainpage_inner_part" />
            </LinearLayout>
        </LinearLayout>
    </LinearLayout> 

MainPageActivity.java

public class MainPageActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_mainpage);

      ListView list;
    final String[] web = {
            getString(R.string.mainpage_acil),
            getString(R.string.mainpage_bildirim),
            getString(R.string.mainpage_isguveligi),
    };
    Integer[] imageId = {
            R.drawable.mainpage_acil_icon_p,
            R.drawable.mainpage_bildirim_icon_p,
            R.drawable.mainpage_isguvenligi_icon_p,
    };
    CustomListMainPage adapter = new
            CustomListMainPage(MainPageActivity.this, web, imageId);
    list = (ListView) findViewById(R.id.list);
    list.setAdapter(adapter);
    list.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                                int position, long id) {
            Log.v("Pozisyon", String.valueOf(position));
            Intent intentPos;
            ImageView imageView= (ImageView) view.findViewById(R.id.img);
            boolean flag=false;
            switch (position) {
                case 0 :
                    //Toast.makeText(MainPageActivity.this, "You Clicked at " + web[+position], Toast.LENGTH_SHORT).show();
                    imageView.setImageResource(R.drawable.mainpage_acil_icon);
                    intentPos=new Intent(MainPageActivity.this,EmergencyActivity.class);
                    startActivity(intentPos);
                    break;

                case 1 :
                    imageView.setImageResource(R.drawable.mainpage_bildirim_icon);
                    intentPos=new Intent(MainPageActivity.this,NotificationPage.class);
                    startActivity(intentPos);                     break;

                case 2 :
                    imageView.setImageResource(R.drawable.mainpage_isguvenligi_icon);
                    intentPos=new Intent(MainPageActivity.this,JobSecurityActivity.class);
                    startActivity(intentPos);
                    break;

                default :
                    System.out.println("Hatali secim! 1, 2 ya da 3'e basiniz.");
                    break;
            }
        }
    });
}

}

Solution

  • I think the easiest way for this is using selector.

    In your activity layout file replace ImageView with Button and set selector as background.

    In your activity layout:

    <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Button"
      android:background="@drawable/btn_selector"
      android:id="@+id/button"/>
    

    And here is the btn_selector.xml file

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
      <item android:state_checked="true" android:state_pressed="true" android:drawable="@drawable/mainpage_acil_icon" />
      <item android:state_pressed="true" android:drawable="@drawable/mainpage_acil_icon"/>
      <item android:state_checked="true" android:drawable="@drawable/mainpage_acil_icon"/>
      <item android:drawable="@drawable/mainpage_acil_icon_p"/>
    </selector>
    

    put this selector file in your res/drawable folder. I think this will help you.