您的位置:首页 > 其它

我遇到的ListView 列表内播放视频 非常卡顿的一个问题

2017-12-08 16:51 1161 查看
项目需求。一个页面内有的其他不少组件包括banner 和 几个 TextView ,下部是一个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 的高度。发现问题解决了。

但是为什么会有这样的问题。。依旧不知道原因。。。。。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: