0

我想在单击特定按钮时更改按钮的图像并删除所有其他按钮,请帮助。

这是我的代码

public void onClick(View view) {
    Object tag = ((Button) view).getTag();

    System.out.println("value o ftagagdsgsdg:::" +tag.toString());
    String strtag = tag.toString();
    System.out.println("value of strtag:::" +strtag);

    enablebutton = Integer.valueOf(tag.toString());

    System.out.println("value of enable buttons variable::" +enablebutton);
    DeselectButtons();

    ((Button)view).setEnabled(true);
    for(int a = 0;a<adapt_obj.city_id_array.length;a++){
        System.out.println("ddsgdgsdg::"+adapt_obj.city_code_array[a]);
        System.out.println("value o ftagagdsgsdg:inside for loop::" +tag.toString());

        if(tag.toString() == adapt_obj.city_code_array[a]){
            ((Button)view).setFocusable(true);
            //clicked = false;

            // Calling process to fetch the data of city 
            selectedcityidclicked(tag.toString(), view);
            ((Button)view).setSelected(true);

            /*Drawable dr = getResources().getDrawable(R.drawable.location_btn_active_1);// active
            Bitmap bitmap = ((BitmapDrawable) dr).getBitmap();
            // Scale it to 50 x 50
            // Set your new, scaled drawable "d"
            ((Button)view).setBackgroundDrawable(new BitmapDrawable(Bitmap.createScaledBitmap(bitmap, 10, 10, true)));*/
           // ((Button)view).invalidate();
        }
        else if(tag.toString() != adapt_obj.city_code_array[a]){

            /*((Button)view).setFocusable(true);
            selectedcityidclicked(tag.toString(), view);
            Drawable dr2 = getResources().getDrawable(R.drawable.location_btn_active_1);// inactive
            Bitmap bitmap2 = ((BitmapDrawable) dr2).getBitmap();
            // Scale it to 50 x 50
            Drawable d2 = new BitmapDrawable(Bitmap.createScaledBitmap(bitmap2, 10, 10, true));
            // Set your new, scaled drawable "d"
            ((Button)view).setBackgroundDrawable(d2);
            ((Button)view).invalidate();
            clicked = false;*/
        }
    }

    /*else if(tag.toString() != adapt_obj.city_code_array[a]){
         ((Button)view).setFocusable(true);
        Drawable dr2 = getResources().getDrawable(R.drawable.location_btn_inactive_1);//instead of inactive
        Bitmap bitmap2 = ((BitmapDrawable) dr2).getBitmap();
        // Scale it to 50 x 50
        Drawable d2 = new BitmapDrawable(Bitmap.createScaledBitmap(bitmap2, 10, 10, true));
        // Set your new, scaled drawable "d"
        ((Button)view).setBackgroundDrawable(d2);
        ((Button)view).invalidate();
    }
    else {
        Drawable dr2 = getResources().getDrawable(R.drawable.location_btn_active_1);//white
        Bitmap bitmap2 = ((BitmapDrawable) dr2).getBitmap();
        // Scale it to 50 x 50
        Drawable d2 = new BitmapDrawable(Bitmap.createScaledBitmap(bitmap2, 10, 10, true));
        // Set your new, scaled drawable "d"
        ((Button)view).setBackgroundDrawable(d2);
        ((Button)view).invalidate();
    }*/

    /*((Button) view).setText("*");
    //selectedcityidclicked(tag.toString());
    ((Button) view).setEnabled(false);*/
}
private void DeselectButtons() {
    // TODO Auto-generated method stub
    for(int x=0; x<adapt_obj.city_code_array.length;x++){ 
        System.out.println("value of enable tag::" +enablebutton);
        System.out.println("valuie dofdsf xxx:::" +x);
        if (enablebutton!= x)
            //What should i do here as i had to take the un clicked button as set selected as false //
            // ((Button)view).setSelected(false);
            //this.findViewById(i).setSelected(false);
            //this.findViewById(i).setSelected(false);
    }
}
private void selectedcityidclicked(String cityval, View view) {
     cityidvalue = "&city_code="+cityval;
     System.out.println("value of cityidvalue::" +cityidvalue);

     new MyAsyncTask(view).execute();
}
4

2 回答 2

1

您可以将此选择器用作按钮的可绘制对象,当您单击它或将其选中时,它将更改其可绘制对象。

<?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/home_hover"></item>
    <item android:state_selected="true" android:drawable="@drawable/home_selected"></item>
    <item android:drawable="@drawable/home"></item>
</selector>

为了使其他按钮未选中,您需要循环它们,例如将所有按钮置于线性或相对布局中,而不是在通过其子项获取该相对布局循环的引用并查看它们的标签之后。如果它们等于您想要取消选择的按钮标签,而不是调用该按钮的 setSelected(false)。

private void DeselectButtons() {
    LinearLayout layout = findViewById(R.id.parent_ofbuttons);
    for(int i=0; i<layout.getChildCount(); i++) {
         Button btn = (Button)layout.getChildAt(i);  
         if(btn.getTag().toString().equals("100")) {
              btn.setSelected(false);
         }
    }
}
于 2012-04-18T09:27:58.160 回答
0

创建一个通常是 xml 的选择器 xml

在项目中为 android:state_pressedpressed="true" 和 android:state_pressed="false" 设置图像

my_button_background.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/button_pressed_image"></item>
    <item android:state_pressed="false" android:drawable="@drawable/button_normal_image"></item>
</selector>

然后将此文件保存在您的drawable中,然后将您的按钮背景设置为此文件

作为myButton.setBackgroundResourceId(R.drawable.my_button_background);

-----------------------------------------

已编辑

button1.setOnClickListener(this);
button2.setOnClickListener(this);

现在在你的覆盖 onClick

@Override
OnClick(View v)
{
   if(v.getId() == R.id.button1_id)
   {
      button1.setBackgroundResource(R.drawable.anyImage1);
      button2.setBackgroundResource(R.drawable.anyImage2);
   }
   else
   {
 if(v.getId() == R.id.button1_id)
   {
      button1.setBackgroundResource(R.drawable.anyImage2);
      button2.setBackgroundResource(R.drawable.anyImage1);
   }
   }
}

不要忘记声明 button1 和 button2 成员变量

于 2012-04-18T09:38:49.200 回答