Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/202.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 当listview的listitem在屏幕上完全可见时,如何在videoview中播放和暂停视频_Android_Listview_Android Videoview_Listviewitem - Fatal编程技术网

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我尝试了你所说的,但不起作用,但仍然感谢你的回答我尝试了这个,但第一个视频没有播放,当我更改滚动状态时,应用程序崩溃。