在Android活动中切换按钮可见性

10

我有一个带有两个播放和暂停按钮(当前不可见)以及一个进度条的活动。当我按下播放按钮时,暂停按钮应该变为可见状态,当我按下暂停按钮时,它应该变为不可见状态。

我应该如何实现这一功能?

import android.media.MediaPlayer;
import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;


    public class MainActivity extends Activity implements Runnable, OnClickListener, OnSeekBarChangeListener{
        private SeekBar seekBar;
        private Button startMedia;
        private Button pauseMedia;
        private MediaPlayer mp;

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);             

            AudioControl();         

        }

        public void AudioControl(){
            seekBar = (SeekBar) findViewById(R.id.seekBar1);
            startMedia = (Button) findViewById(R.id.button1);
            pauseMedia = (Button) findViewById(R.id.button2);
            seekBar.setOnSeekBarChangeListener(this);
            startMedia.setOnClickListener(this);
            pauseMedia.setOnClickListener(this); 
        }



        public void run() {
            int currentPosition= 0;
            int total = mp.getDuration();
            while (mp!=null && currentPosition<total) {
                try {
                    Thread.sleep(1000);
                    currentPosition= mp.getCurrentPosition();
                } catch (InterruptedException e) {
                    return;
                } catch (Exception e) {
                    return;
                }            
                seekBar.setProgress(currentPosition);
            }
        }

        public void onClick(View v) {
            if (v.equals(startMedia)) {
                if (mp != null && mp.isPlaying()) return;
                if(seekBar.getProgress() > 0) {
                    mp.start();
                    return;
                }
                mp = MediaPlayer.create(MainActivity.this, R.raw.lone);
                mp.start();                     
                seekBar.setProgress(0);
                seekBar.setMax(mp.getDuration());
                new Thread(this).start();
            }

            if (v.equals(pauseMedia) && mp!=null) {
                mp.pause();
            }       

        }

        public void onStartTrackingTouch(SeekBar seekBar) {
        }

        public void onStopTrackingTouch(SeekBar seekBar) {
        }

        public void onProgressChanged(SeekBar seekBar, int progress,
                boolean fromUser) {
            if(fromUser) mp.seekTo(progress);

        }
    }

我不知道应该把下面的代码放在哪里,请帮忙!

6个回答

24

我用于任何视图:

 public void toggleView(View view){
 if(view.getVisibility()==View.GONE)
   view.setVisibility(View.VISIBLE);
 else if(view.getVisibility()==View.VISIBLE)
   view.setVisibility(View.GONE);
  }

6
startMedia = (Button) findViewById(R.id.button1);
pauseMedia = (Button) findViewById(R.id.button2);

//Onclick Event ...

//Logic
if (flag === 'start') {
startMedia.setVisibility(View.VISIBLE);
pauseMedia .setVisibility(View.INVISIBLE);
} else {
startMedia.setVisibility(View.INVISIBLE);
pauseMedia .setVisibility(View.VISIBLE);
}

GONE选项将使布局管理器忽略小部件的尺寸。INVISIBLE选项将使小部件不可见,但布局管理器仍会将其视为存在。

如果您熟悉CSS:

  • setVisibility(View.INVISIBLE)就像CSS的opacity:0
  • setVisibility(View.GONE)就像CSS的display:none
  • setVisibility(View.VISIBLE)就像CSS的display:block

1
澄清一下,GONE 会使布局管理器忽略小部件的尺寸,因此没有空白空间。相比之下,INVISIBLE 会使布局管理器考虑小部件,因此您将看到小部件曾经存在的空白空间。 - Joe Malin
在 public void onClick(View v) 中 - d.danailov
1
CSS的比喻很棒。谢谢。 - Bikram Kumar

2

使用这个简单的逻辑来切换可见性...

 if (rvLocation.getVisibility()==View.VISIBLE)
        rvLocation.setVisibility(View.GONE);
 else
        rvLocation.setVisibility(View.VISIBLE);

0

我认为以下代码可能会有效,

play.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(getApplicationContext(), "Play", Toast.LENGTH_SHORT).show();
            mediaPlayer.start();
            pause.setEnabled(true);
            play.setEnabled(false);
        }
    });

禁用暂停按钮。
pause.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(getApplicationContext(), "pause", Toast.LENGTH_SHORT).show();
            mediaPlayer.pause();
            pause.setEnabled(false);
            play.setEnabled(true);
        }
    });

我认为这段代码可能适用于你的情况。


0
也许可以尝试这样做:
在这个函数的上下文中。
controls

是在实例化类时膨胀的视图

private void toggleControls(){

    //private variable to store whether or not the view is showing
    if(controlsAreShowing){
       if(controls != null) {
           controls.setVisibility(View.INVISIBLE);
           controlsAreShowing = false;
       }
    }else{
        controls.setVisibility(View.VISIBLE);
        controlsAreShowing = true;
    }
}

0

您可以使用以下代码将pauseMedia的可见性设置为不可见:

pauseMedia.setVisibility(View.INVISIBLE);

或将其设置为可见:

pauseMedia.setVisiblity(View.VISIBLE);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接