Android 当listview的listitem在屏幕上完全可见时,如何在videoview中播放和暂停视频
我已经尝试了所有的方法,但仍然不能得到确切的答案Android 当listview的listitem在屏幕上完全可见时,如何在videoview中播放和暂停视频,android,listview,android-videoview,listviewitem,Android,Listview,Android Videoview,Listviewitem,我已经尝试了所有的方法,但仍然不能得到确切的答案 <?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"&
<?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">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="400dp">
<VideoView
android:id="@+id/videoview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:layout_marginTop="10dp"
android:layout_gravity="center"
android:visibility="visible" />
</LinearLayout>
</LinearLayout>
视频播放暂停。课堂
public class VideoPlayPause extends Activity {
ListView listView;
boolean aftrpause = false;
MediaController mediacontroller;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Uri videouri1 = Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.big_buck_bunny);
Uri videouri3 = Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.alien);
Uri videouri4 = Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.concept);
ArrayList<Uri> videouri = new ArrayList<Uri>();
videouri.add(videouri1);
videouri.add(videouri4);
videouri.add(videouri3);
videouri.add(videouri1);
videouri.add(videouri4);
listView = (ListView) findViewById(R.id.list);
CustomVideoAdapter adapter = new CustomVideoAdapter(this,
R.layout.activity_listview, videouri);
listView.setAdapter(adapter);
}
public class CustomVideoAdapter extends ArrayAdapter<Uri> {
Context context;
ArrayList<Uri> items;
public CustomVideoAdapter(Context context, int resourceId, ArrayList<Uri> videouri) {
super(context, resourceId, videouri);
this.context = context;
this.items = videouri;
}
/*private view holder class*/
private class ViewHolder {
VideoView videoView;
}
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
View v = convertView;
if (v == null) {
LayoutInflater mInflater = (LayoutInflater) context
.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
convertView = mInflater.inflate(R.layout.activity_listview, null);
holder = new ViewHolder();
holder.videoView = (VideoView) convertView.findViewById(videoview);
convertView.setTag(holder);
} else
holder = (ViewHolder) convertView.getTag();
Log.i("UriSSSSSSSSSSSSSSS", "" + items.get(position));
try {
// Start the MediaController
mediacontroller = new MediaController(context);
mediacontroller.setVisibility(View.GONE);
mediacontroller.setAnchorView(holder.videoView);
holder.videoView.setMediaController(mediacontroller);
Log.i("Uris out", items.get(position) + "");
holder.videoView.setVideoURI(Uri.parse(String.valueOf(items.get(position))));
} catch (Exception e) {
Log.e("Error", e.getMessage());
e.printStackTrace();
}
final ViewHolder finalHolder = holder;
listView.setOnScrollListener(new AbsListView.OnScrollListener() {
int time = 0, pausetime;
Rect r = new Rect();
boolean isViewVisible = finalHolder.videoView.isShown();
View currentFocusedLayout, oldFocusedLayout;
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
int firstVisibleRow = listView.getFirstVisiblePosition();
int lastVisibleRow = listView.getLastVisiblePosition();
finalHolder.videoView.getGlobalVisibleRect(r);
firstVisibleRow = listView.getFirstVisiblePosition();
lastVisibleRow = listView.getLastVisiblePosition();
for (int i = firstVisibleRow; i <= lastVisibleRow; i++) {
//Write your code here(allocation/deallocation/store in array etc.)
System.out.println(i + "=" + listView.getItemAtPosition(i));
Log.i("i Position>>>>", "" + i);
View listItem = listView.getChildAt(i);
if (listItem != null && listItem.isShown()) {
if (aftrpause) {
finalHolder.videoView.seekTo(pausetime);
finalHolder.videoView.start();
} else {
finalHolder.videoView.start();
}
} else {
pausetime = finalHolder.videoView.getCurrentPosition();
finalHolder.videoView.pause();
aftrpause = true;
}
}
}
});
holder.videoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
// setLooping(true) didn't work, thats why this workaround
finalHolder.videoView.start();
}
});
return convertView;
}
}
}
公共类视频播放暂停扩展活动{
列表视图列表视图;
布尔aftrpause=false;
媒体控制器;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
urivideouri1=Uri.parse(“android.resource://”+getPackageName()+“/”+R.raw.big\u buck\u bunny);
urivideouri3=Uri.parse(“android.resource://”+getPackageName()+“/”+R.raw.alien);
urivideouri4=Uri.parse(“android.resource://”+getPackageName()+“/”+R.raw.concept);
ArrayList videouri=新的ArrayList();
videouri.add(videouri1);
videouri.add(videouri4);
videouri.add(videouri3);
videouri.add(videouri1);
videouri.add(videouri4);
listView=(listView)findViewById(R.id.list);
CustomVideoAdapter=新的CustomVideoAdapter(此,
R.layout.activity_列表视图,videouri);
setAdapter(适配器);
}
公共类CustomVideoAdapter扩展了ArrayAdapter{
语境;
数组列表项;
公共CustomVideoAdapter(上下文上下文、int resourceId、ArrayList videouri){
超级(上下文、资源ID、视频URI);
this.context=上下文;
this.items=videouri;
}
/*私有视图持有者类*/
私有类视窗持有者{
视频视图;
}
公共视图getView(最终整数位置、视图转换视图、视图组父视图){
ViewHolder=null;
视图v=转换视图;
如果(v==null){
LayoutInflater mInflater=(LayoutInflater)上下文
.getSystemService(活动.布局\充气机\服务);
convertView=mInflater.inflate(R.layout.activity\u listview,null);
holder=新的ViewHolder();
holder.videoView=(videoView)convertView.findViewById(videoView);
convertView.setTag(支架);
}否则
holder=(ViewHolder)convertView.getTag();
Log.i(“urissss”,“items.get(position));
试一试{
//启动MediaController
mediacontroller=新的mediacontroller(上下文);
mediacontroller.setVisibility(View.GONE);
mediacontroller.setAnchorView(holder.videoView);
holder.videoView.setMediaController(mediacontroller);
Log.i(“Uris out”,items.get(position)+”);
holder.videoView.setVideoURI(Uri.parse(String.valueOf(items.get(position)));
}捕获(例外e){
Log.e(“Error”,e.getMessage());
e、 printStackTrace();
}
最终视图持有者finalHolder=持有者;
setOnScrollListener(新的AbsListView.OnScrollListener(){
int time=0,暂停时间;
Rect r=新的Rect();
布尔值isViewVisible=finalHolder.videoView.isShown();
查看currentFocusedLayout、oldFocusedLayout;
@凌驾
公共无效onScrollStateChanged(AbsListView视图,int scrollState){
}
@凌驾
public void onScroll(AbsListView视图、int firstVisibleItem、int visibleItemCount、int totalItemCount){
int firstVisibleRow=listView.getFirstVisiblePosition();
int lastVisibleRow=listView.getLastVisiblePosition();
finalHolder.videoView.getGlobalVisibleRect(r);
firstVisibleRow=listView.getFirstVisiblePosition();
lastVisibleRow=listView.getLastVisiblePosition();
对于(int i=firstVisibleRow;i您可以使用RecyclerView
。然后尝试使用此代码
RecyclerView rv_featureList;
private View currentFocusedLayout, oldFocusedLayout;
@Override
public void onCreate(Bundle instanceState) {
rv_featuredList.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView,
int newState) {
super.onScrollStateChanged(recyclerView, newState);
if (newState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE) {
//get the recyclerview position which is completely visible and first
int positionView = ((LinearLayoutManager) recyclerView.getLayoutManager()).findFirstCompletelyVisibleItemPosition();
Log.i("VISISBLE", positionView + "");
if (positionView >= 0) {
if (oldFocusedLayout != null) {
//Stop the previous video playback after new scroll
}
currentFocusedLayout = ((LinearLayoutManager) recyclerView.getLayoutManager()).findViewByPosition(positionView);
//play video
oldFocusedLayout = currentFocusedLayout;
}
}
}
});
}
下面是实现尝试listview.setOnFocusChangeListener…
在此处何处使用setOnFocusChangeListener?Devendra我尝试了你所说的,但不起作用,但仍然感谢你的回答我尝试了这个,但第一个视频没有播放,当我更改滚动状态时,应用程序崩溃。