Java 如何仅更改imagebutton内部的图像而不更改整个imagebutton

Java 如何仅更改imagebutton内部的图像而不更改整个imagebutton,java,android,imagebutton,Java,Android,Imagebutton,我有一个使用btn_星的imagebutton。它看起来像灰色按钮上的一颗小星星 我想在运行时使用backgroundresource更改星号,但由于某些原因,当我尝试更改星号时,它只更改灰色部分,而不更改星号部分,因此看起来在彼此的顶部有两颗星号。我使用的是下面的命令 btnChild.setBackgroundResource(android.R.drawable.btn\u star\u big\u on) 如何仅更改imagebutton中的星形部分并保留灰色“button”部分 xm

我有一个使用btn_星的imagebutton。它看起来像灰色按钮上的一颗小星星

我想在运行时使用backgroundresource更改星号,但由于某些原因,当我尝试更改星号时,它只更改灰色部分,而不更改星号部分,因此看起来在彼此的顶部有两颗星号。我使用的是下面的命令

btnChild.setBackgroundResource(android.R.drawable.btn\u star\u big\u on)

如何仅更改imagebutton中的星形部分并保留灰色“button”部分

xml:

图像按钮 android:id=“@+id/btntock” android:layout_width=“60dp” android:layout_height=“60dp” android:onClick=“myClickHandler” android:layout_marginTop=“4dp”
android:layout\u alignParentRight=“true”
android:focusableInTouchMode=“true” android:focusable=“true”

致意
Joe

您使用的方法用于更改背景资源。要更改前景,请使用以下方法:


修改后的答案

<ImageButton
    android:id="@+id/imageButton1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"   
    android:focusableInTouchMode="true" 
    android:focusable="true"
    android:onClick="myClickHandler"     
     />

public void myClickHandler(View v) 
    {
        if(flag==false)
        {
            flag=true;
            imgBtn.setSelected(false);
            imgBtn.setImageResource(R.drawable.ic_launcher);
        }
        else
        {
            flag=false;
            imgBtn.setSelected(true);
            imgBtn.setImageResource(R.drawable.star);
        }
    }

公共无效myClickHandler(视图v)
{
如果(标志==false)
{
flag=true;
imgBtn.setSelected(假);
imgBtn.setImageResource(R.drawable.ic_启动器);
}
其他的
{
flag=false;
imgBtn.setSelected(真);
imgBtn.setImageResource(R.drawable.star);
}
}

以上代码对我来说是可行的

使用setImageDrawable更改ImageButton图标。 在Xml中:


请给我们看一下更改按钮背景的XML代码和Java部分好吗?@joe请稍等。我会检查这个并让你知道。@Joe我已经找到问题并给你解决代码。它仍然不起作用。唯一发生的事情是按钮图像消失。btnChild.SetImageResource位于clickevent公共void myClickHandler(视图v)中,但我认为这没有任何区别。出于某种原因,btnChild.SetBackgroundResource可以工作,但它会更改背景图像。这会在UI线程上读取和解码位图,这可能会导致延迟中断。如果这是一个问题,考虑使用SETimaDeDRAWEPLAN(Android .Cabase.Dababl,Dababl)或SeTimeAdBMAP(Android,图形,位图)和BitmapFactory。试过了,但还是不行work@Joe请提供您的XML和源代码。虽然我现在要注销,但当我登录时,我会通知您。@Joe我已经按照您的代码结构编辑了我的代码。这对我来说是可行的。我不知道你怎么了。请清理并构建项目。
btnChild.setImageResource(android.R.drawable.btn_star_big_on);
<ImageButton
    android:id="@+id/imageButton1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"   
    android:focusableInTouchMode="true" 
    android:focusable="true"
    android:onClick="myClickHandler"     
     />

public void myClickHandler(View v) 
    {
        if(flag==false)
        {
            flag=true;
            imgBtn.setSelected(false);
            imgBtn.setImageResource(R.drawable.ic_launcher);
        }
        else
        {
            flag=false;
            imgBtn.setSelected(true);
            imgBtn.setImageResource(R.drawable.star);
        }
    }
<ImageButton
    android:id="@+id/button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@android:drawable/btn_star"
    />
`ImageButton button = findViewById(R.id.button);


button.setImageDrawable(getResources().getDrawable(android.R.drawable.btn_star));