編集:私は解決策を見つけた可能性があります。代わりにVideoView
を使用して、私はTextureView
のこの実装に切り替え:URLからのVideoViewの読み込み遅れフラグメント
https://github.com/sprylab/texturevideoview
しかし、誰かが、これは私の問題を修正しているようだ理由を説明することができますか?
ビデオ(外部URLから)をVideoViewに読み込むシンプルなフラグメントがあります。
フラグメントが呼び出されると、ビデオが完全にロードされるまで表示されないという問題があります。フラグメントが最終的にロードされるまでに通常1〜3秒かかります。メインUIスレッドをブロックしているVideoViewの読み込みと関係があると思いますか?私は100%確実ではない。ここで
は私の断片である:public class MyFragment extends DialogFragment {
private User user;
private ViewPager viewPager;
private MyViewPagerAdapter myViewPagerAdapter;
public static MyFragment newInstance() {
MyFragment fragment = new MyFragment();
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_main, container, false);
viewPager = (ViewPager) v.findViewById(R.id.viewPager);
user = Parcels.unwrap(getArguments().getParcelable("user"));
myViewPagerAdapter = new MyViewPagerAdapter();
viewPager.setAdapter(myViewPagerAdapter);
setCurrentItem(selectedPosition);
return v;
}
private void setCurrentItem(int position) {
viewPager.setCurrentItem(position, false);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(DialogFragment.STYLE_NORMAL, android.R.style.Theme_Black_NoTitleBar_Fullscreen);
}
public class MyViewPagerAdapter extends PagerAdapter {
private LayoutInflater layoutInflater;
private VideoView videoView;
public MyViewPagerAdapter() {
//
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
layoutInflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = layoutInflater.inflate(R.layout.video_layout, container, false);
UserVideo video = user.getVideos().get(position);
videoView = (VideoView) view.findViewById(R.id.video);
Uri videoUri = Uri.parse(video.getUrl());
videoView.setVideoURI(videoUri);
videoView.setMediaController(null);
videoView.requestFocus();
videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
public void onPrepared(MediaPlayer mp) {
videoView.start();
mp.setLooping(true);
}
});
container.addView(view);
return view;
}
@Override
public int getCount() {
return user.getVideos().size();
}
@Override
public boolean isViewFromObject(View view, Object obj) {
return view == ((View) obj);
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
}
}
私はロードにそう長く取ってからの断片を停止するために何を変更する必要がありますか?
私は別のスレッドでthis solutionを、次の試してみましたが、それはまだフラグメント表示/ロードするために1-3秒かかる:
https://gist.github.com/anonymous/b4fb728816962c7d208f8d85e7bdba26
私はそれは、ビデオコントロールを表示しないようにnullにメディアコントローラを設定します。これがどのように役立つか分かりません... – user7752683