为什么在两个布局之间显示黑色背景

时间:2013-05-01 00:12:14

标签: android background

我有无线电应用流,当打开此应用时,首先打开它的开放式布局:

splash.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/imageView1"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:src="@drawable/loading" />

<ProgressBar
    android:id="@+id/progressBar1"
    style="?android:attr/progressBarStyleHorizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1.67" />

</LinearLayout>

和它类似:

StartPoint.java

public class StartPoint extends Activity{

ProgressBar progressBar;
private int progressBarStatus = 0;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.splash);

    progressBar = (ProgressBar)findViewById(R.id.progressBar1);


    Thread timer = new Thread(){
        public void run(){
            try{
                sleep(5000);
                while(progressBarStatus < 5000){
                    StartPoint.this.runOnUiThread(new Runnable(){
                        public void run()
                        {
                            progressBar.setProgress(progressBarStatus);
                            progressBarStatus += 1000;
                        }
                    });

                }
            }catch(InterruptedException e){
                e.printStackTrace();
            }finally{
                Intent openMainList = new Intent(StartPoint.this, 
                                           com.example.kam.MainActivity.class);
                startActivity(openMainList);
            }
        }
    };
    timer.start();
}

@Override
protected void onStop(){
   super.onStop();
   finish();
}

}

这个类完成后,它调用MainActivity.java类,并显示它:

MainActivity.java

public class MainActivity extends Activity implements OnClickListener {
    // Define ..............................................................
    private static ProgressDialog progressDialog;
    public MediaPlayer mp;
    boolean isPrepared = false;
    Button PlayBtn, ExitBtn, PauseBtn, RefreshBtn;
    String MEDIA_PATH;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        progressDialog = ProgressDialog.show(MainActivity.this, "", 
                                                  "Buffering Radio...", true);
        progressDialog.setCancelable(false);
        // Declare
        // ..............................................................
        mp = new MediaPlayer();
        PlayBtn = (Button) findViewById(R.id.btnPlay);
        PlayBtn.setOnClickListener(this);
        PauseBtn = (Button) findViewById(R.id.btnPause);
        PauseBtn.setOnClickListener(this);
        RefreshBtn = (Button) findViewById(R.id.btnRefresh);
        RefreshBtn.setOnClickListener(this);
        ExitBtn = (Button) findViewById(R.id.btnExit);
        ExitBtn.setOnClickListener(this);
        MEDIA_PATH = "http://radio.arabhosters.com:8015/";

        // Volume Control
        // ..............................................................
        final AudioManager leftAm = (AudioManager)
                                      getSystemService(Context.AUDIO_SERVICE);
        int maxVolume = leftAm.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
        int curVolume = leftAm.getStreamVolume(AudioManager.STREAM_MUSIC);
        SeekBar volControl = (SeekBar) findViewById(R.id.volumebar);
        volControl.setMax(maxVolume);
        volControl.setProgress(curVolume);
        volControl.setOnSeekBarChangeListener
                                      (new SeekBar.OnSeekBarChangeListener() {

            @Override
            public void onStopTrackingTouch(SeekBar arg0) {
                // TODO Auto-generated method stub
            }

            @Override
            public void onStartTrackingTouch(SeekBar arg0) {
                // TODO Auto-generated method stub
            }

            @Override
            public void onProgressChanged
                                (SeekBar arg0, int arg1, boolean arg2) {
                // TODO Auto-generated method stub
            leftAm.setStreamVolume(AudioManager.STREAM_MUSIC, arg1, 0);
             }
        });
    }

    @Override
    public void onClick(View v) {
        if (v == PlayBtn) {
            startradio();
        }
        else if (v == PauseBtn) {
            pauseradio();
        }
        else if (v == ExitBtn) {
            exitradio();
        }
        else if (v == RefreshBtn) {
            try {
                refreshradio();
            }
            catch (IllegalArgumentException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            catch (SecurityException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

    public void onCompletion(MediaPlayer mediaPlayer) {
        synchronized (this) {
            isPrepared = false;
        }
    }

    protected void onResume() {
        super.onResume();

        try {
            mp.setDataSource(MEDIA_PATH);
        }
        catch (IllegalArgumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        catch (SecurityException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        catch (IllegalStateException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
        try {
            mp.prepare();
        }
        catch (IllegalStateException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } // also consider mp.prepareAsync().
            // defult start stream when start App.
        mp.start();
        mp.setVolume(100, 100);
        progressDialog.dismiss();
    }

    // method for play stream after stop it.
    public void startradio() {
        try {
            if (mp.isPlaying()) {
                return;
            }
            mp.start();
            progressDialog.dismiss();
        }
        catch (IllegalStateException ex) {
            ex.printStackTrace();
        }
    }

    // method for Refresh stream.
    public void refreshradio() throws IllegalArgumentException, 
                                       SecurityException, IOException {
        try {
            if (mp.isPlaying()) {
                return;
            }
            mp.reset();
            mp.setDataSource(MEDIA_PATH);
            mp.prepare();
            mp.start();
            progressDialog.dismiss();
        }
        catch (IllegalStateException ex) {
            ex.printStackTrace();
        }
    }

    // method for pause stream.
    public void pauseradio() {
        mp.pause();
    }

    // method for check is radio paly or not stream
    public boolean isPlaying() {
        return mp.isPlaying();
    }

    // method for Looping audio if your record it - Soon :)
    public boolean isLooping() {
        return mp.isLooping();
    }

    // method for Looping audio if your record it - Soon :)
    public void setLooping(boolean isLooping) {
        mp.setLooping(isLooping);
    }

    // method for volume
    public void setVolume(float volumeLeft, float volumeRight) {
        mp.setVolume(volumeLeft, volumeRight);
    }

    // method for stop stream.
    public void stopradio() {
        if (mp.isPlaying()) {
            mp.stop();
        }
        mp.release();
    }

    // method for exit.
    public void exitradio() {
        finish();
        System.exit(0);
    }

    // method for back to main menu "Home".
    public void backtomenu() {
        finish();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
       // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

和它的布局如:

activity_main.xml中

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/screen" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="@drawable/bg">

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:orientation="vertical"
         >

        <LinearLayout
            android:layout_weight="6" 
            android:orientation="vertical" 
            android:layout_alignParentTop="true" 
            android:layout_alignParentLeft="true" 
            android:layout_width="fill_parent" 
            android:layout_height="0dip" >

        </LinearLayout>

        <LinearLayout
            android:id="@+id/buttons"
            android:layout_width="match_parent"
            android:layout_height="0dip"
            android:layout_alignParentLeft="true"
            android:layout_weight="0.62"
            android:background="@drawable/iconbgrepate"
            android:gravity="center"
            android:orientation="horizontal"
            android:tileMode="repeat"
            android:weightSum="5" 
            android:alpha=".75">

        <SeekBar
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:id="@+id/volumebar"
            android:max="100"
            android:paddingBottom="10dip"/>

        </LinearLayout>

        <LinearLayout
            android:id="@+id/buttons"
            android:layout_width="match_parent"
            android:layout_height="0dip"
            android:layout_alignParentLeft="true"
            android:layout_weight="0.62"
            android:background="@drawable/iconbgrepate"
            android:gravity="center"
            android:orientation="horizontal"
            android:tileMode="repeat"
            android:weightSum="5" >

           <Button
               android:id="@+id/btnRefresh"
               android:layout_width="32dp"
               android:layout_height="match_parent"
               android:layout_margin="5dp"
               android:layout_weight="0.10"
               android:background="@drawable/refreshbutton" />

           <View android:layout_weight="1" 
               android:layout_width="0dip" 
               android:layout_height="0dip" />

            <Button
                android:id="@+id/btnPause"
                android:layout_width="32dp"
                android:layout_height="match_parent"
                android:layout_margin="5dp"
                android:layout_weight="0.05"
                android:background="@drawable/pausebutton" />

            <View android:layout_weight="1" 
                android:layout_width="0dip" 
                android:layout_height="0dip" />

            <Button
                android:id="@+id/btnPlay"
                android:layout_width="32dp"
                android:layout_height="match_parent"
                android:layout_margin="5dp"
                android:layout_weight="0.05"
                android:background="@drawable/playbutton" />

            <View android:layout_weight="1" 
                android:layout_width="0dip" 
                android:layout_height="0dip" />

            <Button
                android:id="@+id/btnExit"
                android:layout_width="32dp"
                android:layout_height="match_parent"
                android:layout_margin="5dp"
                android:layout_weight="0.12"
                android:background="@drawable/exitbutton" />

        </LinearLayout>
    </LinearLayout>
</RelativeLayout>

为什么从splash.xmlactivity_main.xml的转换显示黑色背景几分钟并显示应用。

2 个答案:

答案 0 :(得分:0)

由于你正在改变活动,它会像你说的那样显示一些动画或黑屏。它是默认行为。您可以在主活动之上使用带有初始布局的自定义对话框。您可以触发对话框以完成进度关闭。使用两个活动可以产生其他效果。例如,当用户点击后退按钮时,它将返回启动画面而不是退出应用程序。

答案 1 :(得分:0)

试试吧

 Thread timer = new Thread(){
    public void run(){
        try{

            while(progressBarStatus < 5000){
                StartPoint.this.runOnUiThread(new Runnable(){
                    public void run()
                    {
                        progressBar.setProgress(progressBarStatus);
                        progressBarStatus += 1000;
                    }
                });
                    sleep(5000);
            }