我遇到的ListView 列表内播放视频 非常卡顿的一个问题
2017-12-08 16:51
1161 查看
项目需求。一个页面内有的其他不少组件包括banner 和 几个 TextView ,下部是一个listView ,ListView 里面包含视频。可以播放。放大播放。整体可以下拉刷新。
实现思路:使用带下拉刷新的ScrollView ,内部嵌套需要的组件。出现了一个问题。此时 ListView 是显示不全的。解决办法有2个。
方法1:
第一种方法:写一个方法重新测量高度并设置给listview即可。
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
在设置完adapter后调用下这个方法即可。
第二种方法:就是自定义一个ListView重写onMeasure方法
俩种方法都可以,俩种方法有什么实质性的不同?不太懂。我选择了第二种方法处理上面的问题。。
视频播放选择的是网上的demo ,有很多。可以自行百度。我选择了其中一种放到项目里。
地址是:https://github.com/lipangit/JiaoZiVideoPlayer git上 Star 达到了 5000+。它的原理是Media+TextureView 来实现的。
实际运行中发现。。视频播放以后。视频卡顿。反应延迟。ListView 根本划不动。有木有?WHY?
解决办法:
1:视频组件选择的有问题?更换其他视频播放组件。?。未解决。并且demo里面的列表播放视频 没问题啊。
2、手机配置问题。?所有手机都有这种问题。。Demo里面没问题啊。
3、下拉刷新组件影响? 去掉这个组件 发现依旧不管用
最后的结果就是 不管怎么弄 。。问题依旧没有解决。。后来 经过大量 、一点点功能拆分测试。。
发现问题出在了ListView上。我用的ListView是自定义的。修改为Android 原生ListView 。 然后采用第一种方法 设置ListView 的高度。发现问题解决了。
但是为什么会有这样的问题。。依旧不知道原因。。。。。。。
实现思路:使用带下拉刷新的ScrollView ,内部嵌套需要的组件。出现了一个问题。此时 ListView 是显示不全的。解决办法有2个。
方法1:
第一种方法:写一个方法重新测量高度并设置给listview即可。
public static void setListViewHeightBasedOnChildren(ListView listView) { //获得adapter MyAdapter adapter = (MyAdapter) listView.getAdapter(); if (adapter == null) { return; } int totalHeight = 0; for (int i = 0; i < adapter.getCount(); i++) { View listItem = adapter.getView(i, null, listView); listItem.measure(0, 0); //计算总高度 totalHeight += listItem.getMeasuredHeight(); } ViewGroup.LayoutParams params = listView.getLayoutParams(); //计算分割线高度 params.height = totalHeight + (listView.getDividerHeight() * (adapter.getCount() - 1)); //给listview设置高度 listView.setLayoutParams(params); }1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
在设置完adapter后调用下这个方法即可。
MyAdapter adapter = new MyAdapter(); listview.setAdapter(adapter); setListViewHeightBasedOnChildren(listview);
第二种方法:就是自定义一个ListView重写onMeasure方法
package com.sy.mylistview; import android.content.Context; import android.util.AttributeSet; import android.widget.ListView; /** * Created by SY on 2016/6/15. */ public class MyListView extends ListView { public MyListView(Context context) { super(context); } public MyListView(Context context, AttributeSet attrs) { super(context, attrs); } public MyListView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { //重新设置高度 heightMeasureSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, heightMeasureSpec); } }
俩种方法都可以,俩种方法有什么实质性的不同?不太懂。我选择了第二种方法处理上面的问题。。
视频播放选择的是网上的demo ,有很多。可以自行百度。我选择了其中一种放到项目里。
地址是:https://github.com/lipangit/JiaoZiVideoPlayer git上 Star 达到了 5000+。它的原理是Media+TextureView 来实现的。
实际运行中发现。。视频播放以后。视频卡顿。反应延迟。ListView 根本划不动。有木有?WHY?
解决办法:
1:视频组件选择的有问题?更换其他视频播放组件。?。未解决。并且demo里面的列表播放视频 没问题啊。
2、手机配置问题。?所有手机都有这种问题。。Demo里面没问题啊。
3、下拉刷新组件影响? 去掉这个组件 发现依旧不管用
最后的结果就是 不管怎么弄 。。问题依旧没有解决。。后来 经过大量 、一点点功能拆分测试。。
发现问题出在了ListView上。我用的ListView是自定义的。修改为Android 原生ListView 。 然后采用第一种方法 设置ListView 的高度。发现问题解决了。
但是为什么会有这样的问题。。依旧不知道原因。。。。。。。
相关文章推荐
- android列表中使用MediaPlayer播放视频的一个问题
- 自己写一个app,遇到listview滑动卡顿的问题。
- Android-ScalableVideoView ListView列表每一个播放多个视频
- ExpandableStickyListHeadersListView遇到的一个问题
- ubuntu系统qt中播放音频和视频遇到的问题及解决方法
- Android在滚动列表中实现视频的播放(ListView & RecyclerView)
- 经常会遇到一个程序模块先有一个列表区接着再编辑表单的问题
- H5 video播放视频遇到的问题
- ExpandableStickyListHeadersListView遇到的一个问题
- OpenCV Trackbar 实现播放视频代码遇到的问题 cvQueryFrame cvCreateFileCapture cvCreateTrackbar cvSetTrackbarPos
- PopupWindow中设置一个ListView遇到的焦点问题
- ExpandableStickyListHeadersListView遇到的一个问题
- WPF 窗口属性AllowsTransparency 播放视频时 卡顿问题
- ListView和GridView列表滑动卡顿问题的优化方法汇总
- 在滚动列表中实现视频的播放(ListView & RecyclerView)
- Android在滚动列表中实现视频的播放(ListView & RecyclerView)
- qt 播放音视频遇到问题的解决方法
- ExpandableStickyListHeadersListView遇到的一个问题
- Android 在滚动列表中实现视频的播放(ListView & RecyclerView)
- 在可滑动列表(ListView & RecyclerView)中实现视频播放