Android 我想使用视频在listview中显示多个视频,但无法执行此操作
这是我的密码Android 我想使用视频在listview中显示多个视频,但无法执行此操作,android,Android,这是我的密码 public class MainActivity extends Activity { ListView list; public ArrayList<String> videoList; public CustomListAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(s
public class MainActivity extends Activity {
ListView list;
public ArrayList<String> videoList;
public CustomListAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
list =(ListView)findViewById(R.id.list);
videoList = new ArrayList<String>();
videoList.add("https://www.youtube.com/watch?v=Zgfi7wnGZlE");
videoList.add("https://www.youtube.com/watch?v=Zgfi7wnGZlE");
videoList.add("https://www.youtube.com/watch?v=Zgfi7wnGZlE");
videoList.add("http://www.youtube.com/watch?v=DdlWPL53PvQ#sthash.fW5EtDFb.dpuf");
Log.d("size of videoList:",""+ videoList.size());
adapter = new CustomListAdapter(MainActivity.this, videoList);
list.setAdapter(adapter);
}
public class CustomListAdapter extends BaseAdapter {
private Activity activity;
private LayoutInflater inflater;
private ArrayList<String> videoList;
public CustomListAdapter(Activity activity, ArrayList<String> videoList) {
this.activity = activity;
this.videoList = videoList;
}
@Override
public int getCount() {
return videoList.size();
}
@Override
public Object getItem(int location) {
return videoList.get(location);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (inflater == null)
inflater = (LayoutInflater) activity
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (convertView == null)
convertView = inflater.inflate(R.layout.list_row, null);
VideoView video = (VideoView)convertView.findViewById(R.id.video_view);
video.setVideoPath(videoList.get(position));
video.start();
return convertView;
}
}
}
公共类MainActivity扩展活动{
列表视图列表;
公共阵列列表视频列表;
公共自定义列表适配器;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
list=(ListView)findViewById(R.id.list);
videoList=新的ArrayList();
视频列表。添加(“https://www.youtube.com/watch?v=Zgfi7wnGZlE");
视频列表。添加(“https://www.youtube.com/watch?v=Zgfi7wnGZlE");
视频列表。添加(“https://www.youtube.com/watch?v=Zgfi7wnGZlE");
视频列表。添加(“http://www.youtube.com/watch?v=DdlWPL53PvQ#sthash.fW5EtDFb.dpuf");
Log.d(“视频列表的大小:”,“+videoList.size());
adapter=新的CustomListAdapter(MainActivity.this,videoList);
list.setAdapter(适配器);
}
公共类CustomListAdapter扩展了BaseAdapter{
私人活动;
私人充气机;
私有ArrayList视频列表;
公共CustomListAdapter(活动活动,ArrayList视频列表){
这个。活动=活动;
this.videoList=视频列表;
}
@凌驾
public int getCount(){
返回videoList.size();
}
@凌驾
公共对象getItem(int位置){
返回videoList.get(位置);
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
如果(充气器==null)
充气器=(充气器)活动
.getSystemService(上下文布局\充气机\服务);
if(convertView==null)
convertView=充气机。充气(R.layout.list_行,空);
VideoView视频=(VideoView)convertView.findViewById(R.id.video\u视图);
video.setVideoPath(videoList.get(position));
video.start();
返回视图;
}
}
}
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<ListView
android:id="@+id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:divider="@color/list_divider"
android:dividerHeight="1dp"
android:listSelector="@drawable/list_row_selector" />
</RelativeLayout>
list_raw.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/list_row_selector"
android:padding="8dp" >
<!-- Thumbnail Image -->
<VideoView
android:id="@+id/video_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center" />
</RelativeLayout>
我无法在logcat中获取视频,并且没有任何错误显示,那么B有什么问题?
我在清单中添加了Internet权限,是否需要权限或任何其他设置?尝试设置
VideoURI
而不是VideoPath
,然后再次检查
VideoView video = (VideoView)convertView.findViewById(R.id.video_view);
MediaController mediaController = new MediaController(this);
mediaController.setAnchorView(video);
video.setMediaController(mediaController);
video.setVideoURI(Uri.parse(videoList.get(position)));
video.start();
更新:如果您计划只使用来自YouTube的视频,那么最好的方法就是使用官方的YouTube API。检查这里
我认为我们不应该将视频视图直接放在列表中,因为列表中的每个视图都会被多次重绘或失效,如果用户正在播放和观看任何视频,并且他不小心将其从屏幕上滚动,Android操作系统将释放该内存,因此视频将从一开始就再次播放Video.start()将被反复调用
最佳解决方案是提供任何视频帧的缩略图将视频视图替换为图像视图并单击该视图打开一个新屏幕,在其中放置视频视图并播放。请@nidhi i i thing它将需要更多加载,因为每个项目视图都尝试加载视频。但在listview中显示的最佳方式是获取一个拇指图像并在其上显示图像我添加了此代码而不是设置videopath我设置了videouri,但我的listview中仍然没有显示视频我得到的是空白listview。请给我此类代码的链接以供参考。通过以下链接,您可以将视频帧作为位图。将其设置为图像视图。