0

ビデオと画像を交互に表示するアンドロイドのアプリを開発しています。アプリは動作していますが、トランジションの間に瞬間的な空白の画面が表示されます。移行をスムーズにしたい。どんな助けでも大歓迎です。前もって感謝します。ここにコードがあります -

public class Standee implements Runnable, OnCompletionListener {
    private Vector<File> files;
    private Vector<String> timings;
    private Handler h;
    private VideoView video;
    private ImageView image;
    private Context ctx;
    private int i;
    private MediaPlayer player;
    public MediaPlayer getMediaPlayer(){
        return player;
    }

    public Standee(Context ctx, VideoView video, ImageView image) {
        this.video=video;
        this.image=image;
        this.ctx=ctx;
        i=0;
        h=new Handler();
        files=new Vector<File>();
        timings=new Vector<String>();
        player=MediaPlayer.create(ctx, R.raw.background);
        try {
            FileReader fr=new FileReader(ConfigLoader.BETA_PATH+"media.tmr");
            BufferedReader br=new BufferedReader(fr);
            String s;
            while((s=br.readLine())!=null){
                String[] data=s.split(";");
                files.add(new File(ConfigLoader.BETA_PATH+data[0]));
                timings.add(data[1]);
            }
            br.close();
            video.setOnCompletionListener(this);
            video.setMediaController(null);
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    @Override
    public void onCompletion(MediaPlayer arg0) {


    }

    @Override
    public void run() {
        if(files.elementAt(i).getAbsolutePath().endsWith(".jpg")){
            video.setVisibility(View.GONE);
            image.setVisibility(View.VISIBLE);
            if(video.isPlaying()){
                video.stopPlayback();
            }
            player=MediaPlayer.create(ctx, R.raw.background);
            try {
//              player.prepare();
                player.setLooping(true);
            } catch (IllegalStateException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
            player.start();
            showPhoto();
        }else if(files.elementAt(i).getAbsolutePath().endsWith(".mp4")){
            if(player.isPlaying()){
                player.stop();
//              player.release();
            }
            image.setVisibility(View.GONE);
            video.setVisibility(View.VISIBLE);
            playVideo();
        }

        h.postDelayed(this, Integer.parseInt(timings.elementAt(i)));
        i++;
        if (i >= files.size())
            i = 0;

    }

    public void start(){
        h.post(this);
    }

    public void playVideo(){
        Uri uri = Uri.parse(files.get(i).getAbsolutePath());
        video.setVideoURI(uri);
        video.requestFocus();
        video.start();
    }

    public void showPhoto(){
        image.setImageBitmap(BitmapFactory.decodeFile(files.elementAt(i)
                .getAbsolutePath()));
    }
}
4

1 に答える 1