单击按钮时如何更改图像



因此,当单击图像下方的按钮时,我正在尝试更改图像。我正在尝试将手机从正常模式切换到静音模式,并根据手机状态更改图片。

我在看一本书,不知道哪里出了问题(我不是复制粘贴,因为这会造成问题)。不过这是个好消息。虽然当手机切换到静音模式时,图片不会改变,但当我在静音模式打开的情况下重新打开应用程序时,图像会变为静音时的样子。当我将其切换回正常模式时,它会工作,但不会更改图像,直到我关闭并重新打开应用程序,系统读取手机状态。我不知道出了什么问题,但这是我的代码:

private AudioManager mAudioManager;
    private boolean mPhoneIsSilent;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.linear);
   mAudioManager= (AudioManager)getSystemService (AUDIO_SERVICE);
    checkIfPhoneIsSilent();
   setButtonClickListener(); 
   toggleUi();
}

private void setButtonClickListener(){
    Button toggleButton=(Button) findViewById(R.id.toggleButton);
    toggleButton.setOnClickListener(
            new View.OnClickListener(){
                public void onClick(View v){
                    if (mPhoneIsSilent){
                        mAudioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
            mPhoneIsSilent=false;
            }
            else{
                mAudioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);
            mPhoneIsSilent=true;
            }
        }
    }
            );
}

private void toggleUi() {
    ImageView imageView=(ImageView)findViewById(R.id.phone_icon);
    Drawable newPhoneImage;
    if(mPhoneIsSilent)
        newPhoneImage=getResources().getDrawable(R.drawable.mute);
    else
        newPhoneImage=getResources().getDrawable(R.drawable.unmute);
    imageView.setImageDrawable(newPhoneImage);
    setContentView(R.layout.linear);
}

    private void checkIfPhoneIsSilent()
    {
        int ringerMode=mAudioManager.getRingerMode();
        if(ringerMode==AudioManager.RINGER_MODE_SILENT)
            mPhoneIsSilent=true;
        else mPhoneIsSilent=false;
    }

下面是相应的XML:

       <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
 <ImageView
      android:id="@+id/phone_icon"               
      android:layout_width="wrap_content"               
      android:layout_height="wrap_content"               
      android:layout_gravity="center_horizontal"               
      android:src="@drawable/unmute" />
 <Button 
     android:id="@+id/toggleButton"         
     android:layout_width="wrap_content"         
     android:layout_height="wrap_content"          
     android:layout_gravity="center_horizontal"         
     android:text="Toggle Silent Mode"/>
</LinearLayout>

您的代码中有两个错误

1.setButtonClickListener();在您的活动中调用过一次,即在onCreate()中!所以你的OnClickListener()按钮会工作一次!

2.toggleUi()内部不使用setContentView(R.layout.linear);

适用于1.的解决方案

onCreate() 中使用以下代码

Button toggleButton = (Button) findViewById(R.id.toggleButton);
        toggleButton.setOnClickListener(
        new View.OnClickListener() {
            public void onClick(View v) {
                if (mPhoneIsSilent) {
                    mAudioManager
                            .setRingerMode(AudioManager.RINGER_MODE_NORMAL);
                    mPhoneIsSilent = false;
                    toggleUi();
                } else {
                    mAudioManager
                            .setRingerMode(AudioManager.RINGER_MODE_SILENT);
                    mPhoneIsSilent = true;
                    toggleUi();
                }
            }
        });

并从onCreat() 中删除这两行代码

setButtonClickListener(); 
   toggleUi();

也完全删除您的private void setButtonClickListener()


适用于2.的解决方案

您的toggleUi()应该是:

private void toggleUi() {
        ImageView imageView = (ImageView) findViewById(R.id.phone_icon);
        Drawable newPhoneImage;
        if (mPhoneIsSilent)
            newPhoneImage = getResources().getDrawable(R.drawable.edit_btn);
        else
            newPhoneImage = getResources().getDrawable(R.drawable.ic_launcher);
        imageView.setImageDrawable(newPhoneImage);
    }

更改手机状态后,不会在OnClickListener中调用toggleUi()。因此,该按钮不会被更新。

添加对toggleUi()的调用,作为OnClickListeneronClick(View view)方法的最后一行。这应该会有所帮助。并采用dineshsharma的简化方法。

以下是的简单答案

ImageView imageView;
private void toggleUi() {
        imageView=(ImageView)findViewById(R.id.phone_icon);
        Drawable newPhoneImage;
        if(mPhoneIsSilent)
            imageView.setImageResource(R.drawable.mute);
        else
            imageView.setImageResource(R.drawable.unmute);
    }

您的点击事件将是

private void setButtonClickListener(){

    Button toggleButton=(Button) findViewById(R.id.toggleButton);
    toggleButton.setOnClickListener(
            new View.OnClickListener(){
                public void onClick(View v){
                    if (mPhoneIsSilent){
                        mAudioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
            mPhoneIsSilent=false;
            }
            else{
                mAudioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);
            mPhoneIsSilent=true;
            }
            toggleUi();
        }
    }
            );
}

相关内容

  • 没有找到相关文章

最新更新