android viewflow 自动播放,Android内容流视频自动播放

这周的一个需求,需要实现内容流自动播放,item布局在显示区域达到1/3时开始播放,或者停止播放。

1.首先需要判断每个item中的显示面积是否达到1/3,不足1/3 则视为被盖住了

public boolean isCover() {

boolean cover = false;

Rect rect = new Rect();

// 此方法的返回值返回是否view有可见区域,哪怕只有1px的地方可见就会返回true,传入的rect中会存入显示区域的大小信息

cover = mediaGroup.getGlobalVisibleRect(rect);

ViewGroup.LayoutParams params = mediaGroup.getLayoutParams();

KLog.d("Item isCover :" + rect.width()+"--"+

rect.height()+"--"+rect.top+"--"+ rect.bottom +"--para: "+params.width+"

height:"+ params.height);

if (cover) {

if (rect.height() >= params.height/3) {

return false;

}

}

return true;

}

2.之后需要在Recyclerview停止滑动时判断当前应该播放的位置,还需要和上一个播放的对象进行对比,判断是否是一个位置,first 和last 可以通过layoutmanager的findFirstVisibleItemPosition()和 findLastVisibleItemPosition() 来获取

~~~

case RecyclerView.SCROLL_STATE_IDLE:

int newPosition = getFirstPlayPosition(first, last);

KLog.d("onScrollStateChanged SCROLL_STATE_IDLE :" + newPosition + " -- " + position);

if (newPosition == -1){

// 实践中发现,linearLayoutManager 和 recyclerView的childAt方法返回的itemview大部分是空的,推荐用这个方法来获取 findViewByPosition(position)

View view =linearLayoutManager.findViewByPosition(position);

if (view != null && view instanceof ItemLayout&&((ItemLayout) view).isCover()){

JCVideoPlayerStandard.releaseAllVideos();

position = 0;

}

return;

}

// 如果新位置比原来的位置小,那么取最后一个满足要求的item位置

if (newPosition < position){

// put down

newPosition = getLastPlayPosition(first, last);

}

if (newPosition == position){

return;

}

if (linearLayoutManager.findViewByPosition(position) != null &&

(linearLayoutManager.findViewByPosition(position) instanceof InjoyItemLayout)) {

JCVideoPlayer.releaseAllVideos();

}

((InjoyItemLayout) linearLayoutManager.findViewByPosition(newPosition)).playVideo();

position = newPosition;

~~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值