Video is not pausing in fragment ViewPager(视频没有在片段 ViewPager 中暂停)
问题描述
我正在使用带有片段的 View Pager 来显示图像和视频,我能够正确显示图像和视频,但我有问题,当我滑动视频时,视频正在播放,但我滑动下一个或上一个然后视频是仍在下一个或上一个屏幕上播放,但是当我将两张幻灯片移动到下一个或上一个时,视频正在停止,但为什么不在下一个或上一个幻灯片上播放.
I am using View Pager with fragment to showing image and video, I am able to show image and video properly but I have problem, when I swipe for video, then video is playing, but I swipe next or previous then video is still playing on just next or previous screen but when I move two slide next or previous then video is being stop, but why not on next or previous slide.
我搜索了更多但我没有得到任何解决方案,任何帮助都会很明显.提前致谢.
I search it more but I did not get any solution, any help will be appreciable. Thanks in advance.
这是我的代码:
这是片段类
public class ContentFragment extends Fragment {
private final String imageResourceId;
private String type;
public ContentFragment(String imageResourceId,String type) {
System.out.println("Path In cons="+imageResourceId+"and type is="+type);
this.imageResourceId = imageResourceId;
this.type= type;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.e("Test", "hello");
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.content_layout, container, false);
TouchImageView imageView = (TouchImageView) view.findViewById(R.id.touchImage);
imageView.setImageResource(R.id.touchImage);
imageView.setMaxZoom(10f);
VideoView videoView =(VideoView) view.findViewById(R.id.videoView1);
if(type.equals("image")) {
imageView.invalidate();
imageView.setVisibility(View.VISIBLE);
videoView.setVisibility(View.GONE);
try {
System.out.println("IN Content Fragment"+imageResourceId.toString());
Bitmap bmp = BitmapFactory.decodeFile(imageResourceId.toString());
imageView.setImageBitmap(bmp);
} catch(Exception e) {
System.out.println("Error Of image File"+e);
}
} else
try {
if(type.equals("video")){
videoView.invalidate();
videoView.setVisibility(View.VISIBLE);
imageView.setVisibility(View.GONE);
String path = imageResourceId.toString();
videoView.setVideoURI(Uri.parse(path));
videoView.setMediaController(new MediaController(getActivity()));
videoView.setFocusable(true);
videoView.start();
}
} catch(Exception e) {
e.printStackTrace();
}
return view;
}
}
这是寻呼机适配器活动
public class MediaActivity extends FragmentActivity {
private MyAdapter mAdapter;
private ViewPager mPager;
public ArrayList<Content> contentList;
Context context;
LinearLayout numberOfPageLayout;
SharedPreferences sharedPreferences;
Handler progressHandler;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_media);
context=(Context) getApplicationContext();
mPager = (ViewPager) findViewById(R.id.pager);
progressHandler = new Handler();
contentList=new ArrayList<Content>();
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
// TODO Auto-generated method stub
contentList=new ContentDBAdapter(context).getAllContent();
}
return null;
}
@Override
protected void onPostExecute(Void result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
mAdapter = new MyAdapter(getSupportFragmentManager(),contentList);
mPager.setAdapter(mAdapter);
}
}.execute();
mPager.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int arg0) {
// TODO Auto-generated method stub
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
// TODO Auto-generated method stub
}
@Override
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub
}
});
}
public static class MyAdapter extends FragmentPagerAdapter {
ArrayList <Content>contList=new ArrayList<Content>();
public MyAdapter(FragmentManager fm,ArrayList<Content> cont) {
super(fm);
this.contList=cont;
}
@Override
public int getCount() {
totalPage=contList.size();
return contList.size();
}
@Override
public Fragment getItem(int position) {
Content con=contList.get(position);
return new ContentFragment(con.getPath(),con.getType());
}
}
}
推荐答案
这是因为 ViewPager
保持屏幕外片段启动.例如,您有一个对用户可见的片段.ViewPager
将尝试保持前一个片段(左侧)和下一个片段(右侧)的启动.这允许 ViewPager
在用户决定更改页面时执行平滑滑动,因为已经准备好下一页和上一页.
It is because ViewPager
keeps offscreen fragments started. For instance you have a fragment visible to the user. ViewPager
will try to keep the previous fragment (on the left side) and the next fragment (on the right side) started. This allows ViewPager
performing smooth sliding when user decides to change the page, because the next and the previous pages are already prepared.
在您的情况下,视频播放器不可见(屏幕外),但由于上述行为,ViewPager
使其保持启动状态.您可以使用 setOffscreenPageLimit() 改变这种行为的方法.如果您将页面限制设置为 0
,则屏幕外片段将立即暂停.不幸的是,它们不仅会被暂停,还会停止并脱离活动.这意味着当您返回片段时,它将重新创建整个布局.这就是为什么您可以尝试覆盖 Fragment.setUserVisibleHint()
或 Fragment.onHiddenChanged()
并在那里执行暂停/播放逻辑的原因.ViewPager
将根据片段是否对用户实际可见来更新片段的隐藏状态.
In your case the video player is not visible (offscreen), but ViewPager
keeps it started as due to the behaviour described above. You can use setOffscreenPageLimit() method to change this behaviour. If you set page limit to 0
, then offscreen fragments will be paused immediately. Unfortunately they will not only be paused, but stopped and detached from the activity too. This means when you return back to your fragment, it will recreate the whole layout anew. That's why you can try to override either Fragment.setUserVisibleHint()
or Fragment.onHiddenChanged()
and execute your pause/play logic there. ViewPager
will update hidden state of a fragment depending on whether the fragment is actually visible to user or not.
希望这会有所帮助.
这篇关于视频没有在片段 ViewPager 中暂停的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:视频没有在片段 ViewPager 中暂停
基础教程推荐
- Kivy Buildozer 无法构建 apk,命令失败:./distribute.sh -m “kivy"d 2022-01-01
- android 应用程序已发布,但在 google play 中找不到 2022-01-01
- UIWebView 委托方法 shouldStartLoadWithRequest:在 WKWebView 中等效? 2022-01-01
- 如何让对象对 Cocos2D 中的触摸做出反应? 2022-01-01
- 如何在没有IB的情况下将2个按钮添加到右侧的UINavigationbar? 2022-01-01
- 如何在 UIImageView 中异步加载图像? 2022-01-01
- 当从同一个组件调用时,两个 IBAction 触发的顺序是什么? 2022-01-01
- 在 gmail 中为 ios 应用程序检索朋友的朋友 2022-01-01
- 如何在 iPhone 上显示来自 API 的 HTML 文本? 2022-01-01
- Android:对话框关闭而不调用关闭 2022-01-01