【问题标题】:How to change Image of button when press and Back press?按下和返回时如何更改按钮的图像?
【发布时间】:2017-06-02 06:14:15
【问题描述】:

我正在做直播。我的问题是,当我按下播放按钮时,图像应该变为停止按钮,当我按下停止按钮时,它应该再次变为播放按钮。我很困惑如何做到这一点?这是我的按钮点击监听器..

 btnPublish.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            btnPublish.setImageResource(R.drawable.recordactive);
            SharedPreferences.Editor editor = sp.edit();
            editor.putString("rtmpUrl", rtmpUrl);
            editor.apply();
            mPublisher.startPublish(rtmpUrl);
            mPublisher.startCamera();
        }
    });

当我按下播放按钮时,它会更改为停止图像,但是当我按下停止按钮时,我的应用程序崩溃了。因为我还没有为此编写任何代码。请指导我如何操作。基本上按下那个停止按钮后我想调用这个函数..

   mPublisher.stopPublish();
                mPublisher.stopRecord();

【问题讨论】:

  • 使用布尔变量来管理启动和停止。
  • 你能告诉我任何示例代码吗??
  • 分享你的完整代码
  • 我看不到变量“sp”的初始化位置?

标签: android android-layout android-studio imagebutton


【解决方案1】:
boolean showing = false;

 btnPublish.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if(showing){
            mPublisher.stopPublish();
            mPublisher.stopRecord();
            showing = false;
        }
        else
         {
            btnPublish.setImageResource(R.drawable.recordactive);
          SharedPreferences.Editor editor = sp.edit();
           editor.putString("rtmpUrl", rtmpUrl);
        editor.apply();
        mPublisher.startPublish(rtmpUrl);
        mPublisher.startCamera();
        showing = true;
         }
    }
});

【讨论】:

    【解决方案2】:

    正如 Ronak 所说,您希望跟踪当前状态。您可以使用布尔变量来做到这一点。像这样的

    boolean isRecordActive = false;
    btnPublish.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (isRecordActive) {
                btnPublish.setImageResource(R.drawable.recordinactive);
                // stop streaming
            } else {
                btnPublish.setImageResource(R.drawable.recordactive);
                SharedPreferences.Editor editor = sp.edit();
                editor.putString("rtmpUrl", rtmpUrl);
                editor.apply();
                mPublisher.startPublish(rtmpUrl);
                mPublisher.startCamera();
            }
    
            isRecordActive != isRecordActive;
        }
    });
    

    【讨论】:

    • 是的。 @Abhishek,尝试这样实现。
    【解决方案3】:

    我做了这样的事情......

            btnPublish.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //rtmpUrl = efu.getText().toString();
                btnPublish1.setVisibility(View.VISIBLE);
                btnPublish.setVisibility(View.GONE);
                SharedPreferences.Editor editor = sp.edit();
                editor.putString("rtmpUrl", rtmpUrl);
                editor.apply();
                mPublisher.startPublish(rtmpUrl);
                mPublisher.startCamera();
            }
        });
    
    
    
        btnPublish1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //rtmpUrl = efu.getText().toString();
                btnPublish.setVisibility(View.VISIBLE);
                btnPublish1.setVisibility(View.GONE);
                mPublisher.stopPublish();
                mPublisher.stopRecord();
            }
        });
    

    【讨论】:

      【解决方案4】:
          btnPublish.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View v) {
                  btnPublish.setImageResource(R.drawable.recordactive);
                  SharedPreferences.Editor editor = sp.edit();
                  editor.putString("rtmpUrl", rtmpUrl);
                  editor.apply();
                  //Check what is the image embedded on the button. Assuming button is //ImageButton
                  Integer integer = (Integer) btnPublish.getTag();
                  integer = integer == null ? 0 : integer;
         switch(integer) {
          case R.drawable.recordactive:
           btnPublish.setDrawableResource(R.drawable.recordstop);  //On click of active, //it should change to recordstop first
           btnPublish.setTag(R.drawable.recordstop);
                  mPublisher.startPublish(rtmpUrl);
                  mPublisher.startCamera();
           break;
          case R.drawable.recordstop:
      btnPublish.setDrawableResource(R.drawable.recordactive);  //On click of stop, 
      //it should change to recordactive  first
           btnPublish.setTag(R.drawable.recordactive);
      mPublisher.stopPublish();
                      mPublisher.stopRecord();
          default:
      btnPublish.setDrawableResource(R.drawable.recordactive);  //default is record //active
           btnPublish.setTag(R.drawable.recordactive);
           break;
        }
      
              }
          });
      

      代码是模拟代码。希望有帮助!!!

      【讨论】:

        【解决方案5】:

        您必须设置一个变量来存储按钮的当前状态,然后相应地工作。下面给出一个例子

        boolean isPlaying = false;
        
        btnPublish.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if(isPlaying){
                      isPlaying = false;
                      //what to do when pressing stop button
                      //change your button image
                      //stop camera and other things...
        
                    }else{
                      isPlaying = true;
                      //what to do when pressing the play button
                      btnPublish.setImageResource(R.drawable.recordactive);
                      SharedPreferences.Editor editor = sp.edit();
                      editor.putString("rtmpUrl", rtmpUrl);
                      editor.apply();
                      mPublisher.startPublish(rtmpUrl);
                      mPublisher.startCamera();
                    }
        
                }
            });
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-06-14
          • 2013-06-06
          • 1970-01-01
          • 2011-01-11
          • 2013-06-25
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多