Android fragments 视频在创建上一个片段时闪烁一次

Android fragments 视频在创建上一个片段时闪烁一次,android-fragments,android-videoview,android,blink,Android Fragments,Android Videoview,Android,Blink,我已经使用片段为galaxy tab创建了一个应用程序。我在片段上有一个视频视图,可以从外部存储播放视频 这是该片段的代码- package com.example.hscroll.demo; import android.content.res.Configuration; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import a

我已经使用片段为galaxy tab创建了一个应用程序。我在片段上有一个视频视图,可以从外部存储播放视频

这是该片段的代码-

package com.example.hscroll.demo;

import android.content.res.Configuration;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.MediaController;
import android.widget.RelativeLayout;
import android.widget.VideoView;


public class FragmentVideo1 extends Fragment implements OnTouchListener{

LayoutInflater inflater;
private VideoView video;
private MediaController ctlr;
int length = 0;
boolean isPlaying = false;

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstance)
{
    this.inflater = inflater;
    if(container == null)return null;

    if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT)
        {
            container = (LinearLayout)inflater.inflate(R.layout.video, container, false);
            video=(VideoView)container.findViewById(R.id.video);
            video.setVideoPath("/mnt/sdcard/Ideal Solar/video1.mp4");


            ctlr=new MediaController(inflater.getContext());
            ctlr.setMediaPlayer(video);
            video.setMediaController(ctlr);
            video.requestFocus();
        }else
        {
            container =         (RelativeLayout)inflater.inflate(R.layout.video_land, container, false);
            video=(VideoView)container.findViewById(R.id.myVideo_land);
            video.setVideoPath("/mnt/sdcard/Ideal Solar/video1.mp4");

            ctlr=new MediaController(inflater.getContext());
            ctlr.setMediaPlayer(video);
            video.setMediaController(ctlr);
            video.requestFocus();
            video.start();
        }

    return container;
}

    }
   package com.example.hscroll.demo;

   import java.io.BufferedInputStream;
   import java.io.FileInputStream;

   import android.os.Bundle;
   import android.support.v4.app.Fragment;
   import android.view.LayoutInflater;
   import android.view.View;
   import android.view.ViewGroup;
   import android.widget.LinearLayout;

   import com.example.hscroll.customer.BitmapWeakReference;
   import com.example.hscroll.library.imagezoom.ImageViewTouch;

  public class Fragment2 extends Fragment{

ImageViewTouch imgview ;
LayoutInflater inflater;
FileInputStream in;
BufferedInputStream buf;
BitmapWeakReference bitmap;
ViewGroup con;
static Fragment2 frag2;

public static Fragment2 newInstance(int num)
{
    if(frag2 == null)
        frag2 = new Fragment2();
    return frag2;
}

private final String  PATH = "/mnt/sdcard/Ideal Solar/page_03.png";

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstance)
{
    this.inflater = inflater;
    if(container == null)return null;
    container = (LinearLayout)inflater.inflate(R.layout.fragment0_layout, container, false);
    con = container;
    imgview= (ImageViewTouch)container.findViewById(R.id.imageView1);
    bitmap = new BitmapWeakReference(imgview.selectImage(inflater.getContext(), PATH));
    if(bitmap!=null)
        imgview.setImageBitmapReset( bitmap.get(), true );

    return container;
}   


 @Override
public void onDestroyView() {
     super.onDestroyView();
        imgview.setImageBitmap(null);
        bitmap.clear();
        bitmap = null;
        Fragment1.unbindDrawables(con.findViewById(R.id.ll));
        System.gc();
    }

    }
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:orientation="vertical" >

  <ImageView 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/header"
    android:background="@drawable/video_header"/>

   <VideoView 
    android:id="@+id/video" 
    android:layout_width="match_parent"
    android:layout_height="match_parent"
   />
  </LinearLayout>
当我看到这个视频片段之前的片段时,它会闪烁一次(就像这个片段下面的视频片段是可见的)。这只是第一次发生。如果我回到这个片段,它不会眨眼

视频片段之前片段的代码-

package com.example.hscroll.demo;

import android.content.res.Configuration;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.MediaController;
import android.widget.RelativeLayout;
import android.widget.VideoView;


public class FragmentVideo1 extends Fragment implements OnTouchListener{

LayoutInflater inflater;
private VideoView video;
private MediaController ctlr;
int length = 0;
boolean isPlaying = false;

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstance)
{
    this.inflater = inflater;
    if(container == null)return null;

    if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT)
        {
            container = (LinearLayout)inflater.inflate(R.layout.video, container, false);
            video=(VideoView)container.findViewById(R.id.video);
            video.setVideoPath("/mnt/sdcard/Ideal Solar/video1.mp4");


            ctlr=new MediaController(inflater.getContext());
            ctlr.setMediaPlayer(video);
            video.setMediaController(ctlr);
            video.requestFocus();
        }else
        {
            container =         (RelativeLayout)inflater.inflate(R.layout.video_land, container, false);
            video=(VideoView)container.findViewById(R.id.myVideo_land);
            video.setVideoPath("/mnt/sdcard/Ideal Solar/video1.mp4");

            ctlr=new MediaController(inflater.getContext());
            ctlr.setMediaPlayer(video);
            video.setMediaController(ctlr);
            video.requestFocus();
            video.start();
        }

    return container;
}

    }
   package com.example.hscroll.demo;

   import java.io.BufferedInputStream;
   import java.io.FileInputStream;

   import android.os.Bundle;
   import android.support.v4.app.Fragment;
   import android.view.LayoutInflater;
   import android.view.View;
   import android.view.ViewGroup;
   import android.widget.LinearLayout;

   import com.example.hscroll.customer.BitmapWeakReference;
   import com.example.hscroll.library.imagezoom.ImageViewTouch;

  public class Fragment2 extends Fragment{

ImageViewTouch imgview ;
LayoutInflater inflater;
FileInputStream in;
BufferedInputStream buf;
BitmapWeakReference bitmap;
ViewGroup con;
static Fragment2 frag2;

public static Fragment2 newInstance(int num)
{
    if(frag2 == null)
        frag2 = new Fragment2();
    return frag2;
}

private final String  PATH = "/mnt/sdcard/Ideal Solar/page_03.png";

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstance)
{
    this.inflater = inflater;
    if(container == null)return null;
    container = (LinearLayout)inflater.inflate(R.layout.fragment0_layout, container, false);
    con = container;
    imgview= (ImageViewTouch)container.findViewById(R.id.imageView1);
    bitmap = new BitmapWeakReference(imgview.selectImage(inflater.getContext(), PATH));
    if(bitmap!=null)
        imgview.setImageBitmapReset( bitmap.get(), true );

    return container;
}   


 @Override
public void onDestroyView() {
     super.onDestroyView();
        imgview.setImageBitmap(null);
        bitmap.clear();
        bitmap = null;
        Fragment1.unbindDrawables(con.findViewById(R.id.ll));
        System.gc();
    }

    }
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:orientation="vertical" >

  <ImageView 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/header"
    android:background="@drawable/video_header"/>

   <VideoView 
    android:id="@+id/video" 
    android:layout_width="match_parent"
    android:layout_height="match_parent"
   />
  </LinearLayout>
我只是在展示这个片段上的一个图像

用于视频片段的XML-

package com.example.hscroll.demo;

import android.content.res.Configuration;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.MediaController;
import android.widget.RelativeLayout;
import android.widget.VideoView;


public class FragmentVideo1 extends Fragment implements OnTouchListener{

LayoutInflater inflater;
private VideoView video;
private MediaController ctlr;
int length = 0;
boolean isPlaying = false;

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstance)
{
    this.inflater = inflater;
    if(container == null)return null;

    if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT)
        {
            container = (LinearLayout)inflater.inflate(R.layout.video, container, false);
            video=(VideoView)container.findViewById(R.id.video);
            video.setVideoPath("/mnt/sdcard/Ideal Solar/video1.mp4");


            ctlr=new MediaController(inflater.getContext());
            ctlr.setMediaPlayer(video);
            video.setMediaController(ctlr);
            video.requestFocus();
        }else
        {
            container =         (RelativeLayout)inflater.inflate(R.layout.video_land, container, false);
            video=(VideoView)container.findViewById(R.id.myVideo_land);
            video.setVideoPath("/mnt/sdcard/Ideal Solar/video1.mp4");

            ctlr=new MediaController(inflater.getContext());
            ctlr.setMediaPlayer(video);
            video.setMediaController(ctlr);
            video.requestFocus();
            video.start();
        }

    return container;
}

    }
   package com.example.hscroll.demo;

   import java.io.BufferedInputStream;
   import java.io.FileInputStream;

   import android.os.Bundle;
   import android.support.v4.app.Fragment;
   import android.view.LayoutInflater;
   import android.view.View;
   import android.view.ViewGroup;
   import android.widget.LinearLayout;

   import com.example.hscroll.customer.BitmapWeakReference;
   import com.example.hscroll.library.imagezoom.ImageViewTouch;

  public class Fragment2 extends Fragment{

ImageViewTouch imgview ;
LayoutInflater inflater;
FileInputStream in;
BufferedInputStream buf;
BitmapWeakReference bitmap;
ViewGroup con;
static Fragment2 frag2;

public static Fragment2 newInstance(int num)
{
    if(frag2 == null)
        frag2 = new Fragment2();
    return frag2;
}

private final String  PATH = "/mnt/sdcard/Ideal Solar/page_03.png";

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstance)
{
    this.inflater = inflater;
    if(container == null)return null;
    container = (LinearLayout)inflater.inflate(R.layout.fragment0_layout, container, false);
    con = container;
    imgview= (ImageViewTouch)container.findViewById(R.id.imageView1);
    bitmap = new BitmapWeakReference(imgview.selectImage(inflater.getContext(), PATH));
    if(bitmap!=null)
        imgview.setImageBitmapReset( bitmap.get(), true );

    return container;
}   


 @Override
public void onDestroyView() {
     super.onDestroyView();
        imgview.setImageBitmap(null);
        bitmap.clear();
        bitmap = null;
        Fragment1.unbindDrawables(con.findViewById(R.id.ll));
        System.gc();
    }

    }
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:orientation="vertical" >

  <ImageView 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/header"
    android:background="@drawable/video_header"/>

   <VideoView 
    android:id="@+id/video" 
    android:layout_width="match_parent"
    android:layout_height="match_parent"
   />
  </LinearLayout>


提前感谢所有能够提供帮助的人。

视频视图继承自SurfaceView,SurfaceView导致此问题。 加载应用程序时(在onCreate…)尝试将虚拟SurfaceView添加到主视图。
为我解决了这个问题。

我也面临着同样的问题,当我启动视频片段时,它首先显示BG(壁纸屏幕),然后显示视频片段。我尝试使用onPreparedListener(..),但结果相同…请在这里分享您的代码?您好,支持@Shubh编写的内容-您能提供您所做工作的更多细节吗?仅在Android上。