Skip to content

Commit

Permalink
修复RecyclerView嵌套BaseVideoView设置圆角或设置为圆形后出现滑动方向的尺寸不正确问题并增加示例
Browse files Browse the repository at this point in the history
  • Loading branch information
user committed Jan 15, 2021
1 parent 773d892 commit 46340a3
Show file tree
Hide file tree
Showing 11 changed files with 232 additions and 33 deletions.
48 changes: 23 additions & 25 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,12 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.kk.taurus.avplayer">

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>

<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

<application
Expand All @@ -18,64 +16,64 @@
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:usesCleartextTraffic="true"
android:theme="@style/AppTheme">
android:theme="@style/AppTheme"
android:usesCleartextTraffic="true">
<activity android:name=".ui.RecyclerBaseVideoActivity"></activity>
<activity
android:name=".ui.SplashActivity"
android:screenOrientation="portrait"
android:theme="@style/FullScreenTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".ui.ShareAnimationActivityA"
android:screenOrientation="portrait"/>
android:screenOrientation="portrait" />
<activity
android:name=".ui.ShareAnimationActivityB"
android:screenOrientation="portrait"/>
android:screenOrientation="portrait" />
<activity
android:name=".ui.InputUrlPlayActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:theme="@style/FullScreenTheme"
android:screenOrientation="portrait"/>
android:screenOrientation="portrait"
android:theme="@style/FullScreenTheme" />
<activity
android:name=".ui.listplay.MultiListActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:screenOrientation="portrait"/>

android:screenOrientation="portrait" />
<activity
android:name=".HomeActivity"
android:screenOrientation="portrait"/>

android:screenOrientation="portrait" />
<activity
android:name=".ui.BaseVideoViewActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:screenOrientation="portrait"/>
android:screenOrientation="portrait" />
<activity
android:name=".ui.window.WindowVideoViewActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:screenOrientation="portrait"/>
android:screenOrientation="portrait" />
<activity
android:name=".ui.window.FloatWindowActivity"
android:launchMode="singleTask"
android:configChanges="keyboardHidden|orientation|screenSize"
android:screenOrientation="portrait"/>
android:launchMode="singleTask"
android:screenOrientation="portrait" />
<activity
android:name=".ui.listplay.ListPlayActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:screenOrientation="portrait"/>
android:screenOrientation="portrait" />
<activity
android:name=".ui.DetailPlayActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:screenOrientation="portrait"/>
android:screenOrientation="portrait" />
<activity
android:name=".ui.ViewPagerPlayActivity"
android:screenOrientation="portrait"/>
android:screenOrientation="portrait" />
<activity
android:name=".ui.MusicPlayActivity"
android:exported="true"/>
android:exported="true" />
<activity android:name=".ui.MultiPlayActivity" />
</application>

Expand Down
5 changes: 5 additions & 0 deletions app/src/main/java/com/kk/taurus/avplayer/HomeActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import com.kk.taurus.avplayer.ui.InputUrlPlayActivity;
import com.kk.taurus.avplayer.ui.MultiPlayActivity;
import com.kk.taurus.avplayer.ui.MusicPlayActivity;
import com.kk.taurus.avplayer.ui.RecyclerBaseVideoActivity;
import com.kk.taurus.avplayer.ui.ViewPagerPlayActivity;
import com.kk.taurus.avplayer.ui.listplay.MultiListActivity;
import com.kk.taurus.avplayer.ui.ShareAnimationActivityA;
Expand Down Expand Up @@ -81,6 +82,10 @@ private void updateDecoderInfo() {
mInfo.setText("当前解码方案为:" + defaultPlan.getDesc());
}

public void useBaseVideoViewWithRecycler(View view){
intentTo(RecyclerBaseVideoActivity.class);
}

public void useBaseVideoView(View view){
intentTo(BaseVideoViewActivity.class);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
package com.kk.taurus.avplayer.adapter;

import android.graphics.Rect;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import androidx.annotation.IdRes;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import com.kk.taurus.avplayer.R;
import com.kk.taurus.avplayer.bean.RecyclerBaseVideoBean;
import com.kk.taurus.playerbase.entity.DataSource;
import com.kk.taurus.playerbase.render.AspectRatio;
import com.kk.taurus.playerbase.widget.BaseVideoView;

import java.util.List;

/**
* @author KaraShokZ (张耀中)
* DESCRIPTION
* @name RecyclerBaseVideoContentAdapter
* @date 2021/01/15 14:48
*/
public class RecyclerBaseVideoContentAdapter extends RecyclerView.Adapter<RecyclerBaseVideoContentAdapter.BaseViewHolder> {

private List<RecyclerBaseVideoBean> dataList;
private BaseVideoView typeLiveVideoBvv;

public RecyclerBaseVideoContentAdapter(List<RecyclerBaseVideoBean> dataList) {
this.dataList = dataList;
}

@NonNull
@Override
public BaseViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
if (viewType == 1){
return new BaseViewHolder(View.inflate(parent.getContext(), R.layout.activity_recycler_base_video_type_video, null));
}else {
return new BaseViewHolder(View.inflate(parent.getContext(), R.layout.activity_recycler_base_video_type_item, null));
}

}

@Override
public int getItemViewType(int position) {
return dataList.get(position).itemType;
}

@Override
public void onBindViewHolder(@NonNull BaseViewHolder holder, int position) {
RecyclerBaseVideoBean bean = dataList.get(position);
if (bean.itemType == 1){
if (typeLiveVideoBvv == null){
typeLiveVideoBvv = holder.getView(R.id.activity_recycler_base_video_type_video_bvv);
typeLiveVideoBvv.setOvalRectShape();
// typeLiveVideoBvv.setRoundRectShape(30);
typeLiveVideoBvv.setAspectRatio(AspectRatio.AspectRatio_MATCH_PARENT);
typeLiveVideoBvv.setDataSource(new DataSource(bean.videoUrl));
typeLiveVideoBvv.start();
}
}else {
TextView typeStoreAddressTv = holder.getView(R.id.activity_recycler_base_video_type_item_tv);
typeStoreAddressTv.setText(bean.itemStr);
}
}

@Override
public int getItemCount() {
return dataList != null ? dataList.size() : 0;
}

public static class BaseViewHolder extends RecyclerView.ViewHolder {

private View mItemView;

public BaseViewHolder(@NonNull View itemView) {
super(itemView);
mItemView = itemView;
}

public <T extends View> T getView(@IdRes int viewId){
return mItemView.findViewById(viewId);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package com.kk.taurus.avplayer.bean;

import com.kk.taurus.avplayer.utils.DataUtils;

import java.util.ArrayList;
import java.util.List;

/**
* @author KaraShokZ (张耀中)
* DESCRIPTION
* @name RecyclerBaseVideoBean
* @date 2021/01/15 14:51
*/
public class RecyclerBaseVideoBean {

public static final List<RecyclerBaseVideoBean> getItemList(){
List<RecyclerBaseVideoBean> itemList = new ArrayList<>();
itemList.add(new RecyclerBaseVideoBean(1));
for (int i = 0; i < 50; i++){
itemList.add(new RecyclerBaseVideoBean());
}
return itemList;
}
public int itemType;
public String videoUrl = DataUtils.VIDEO_URL_09,itemStr = "音乐和艺术如何改变世界";

public RecyclerBaseVideoBean(int itemType) {
this.itemType = itemType;
}

public RecyclerBaseVideoBean() {
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.kk.taurus.avplayer.ui;

import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.os.Bundle;

import com.kk.taurus.avplayer.R;
import com.kk.taurus.avplayer.adapter.RecyclerBaseVideoContentAdapter;
import com.kk.taurus.avplayer.bean.RecyclerBaseVideoBean;

public class RecyclerBaseVideoActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_recycler_base_video);
RecyclerView contentRv = findViewById(R.id.content_rv);
contentRv.setLayoutManager(new LinearLayoutManager(this));
// contentRv.setLayoutManager(new LinearLayoutManager(this,RecyclerView.HORIZONTAL,false));
contentRv.setAdapter(new RecyclerBaseVideoContentAdapter(RecyclerBaseVideoBean.getItemList()));
}
}
12 changes: 12 additions & 0 deletions app/src/main/res/layout/activity_home.xml
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,18 @@
android:textSize="14sp"
android:textColor="@color/colorPrimary"/>

<Button
android:id="@+id/tv_recycler"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_marginTop="10dp"
android:gravity="center"
android:onClick="useBaseVideoViewWithRecycler"
android:textAllCaps="false"
android:text="BaseVideoView的Recycler使用"
android:textSize="16sp"
android:textColor="@color/buttonTextColor"/>

<Button
android:id="@+id/tv_videoView"
android:layout_width="match_parent"
Expand Down
12 changes: 12 additions & 0 deletions app/src/main/res/layout/activity_recycler_base_video.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">

<androidx.recyclerview.widget.RecyclerView
android:id="@+id/content_rv"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</FrameLayout>
16 changes: 16 additions & 0 deletions app/src/main/res/layout/activity_recycler_base_video_type_item.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="50dp">

<TextView
android:id="@+id/activity_recycler_base_video_type_item_tv"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:text="sdfsdfdfsdf"
android:textSize="16sp"/>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#f1f1f1"/>
</FrameLayout>
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="300dp"
android:layout_height="300dp"
android:background="#def453">

<com.kk.taurus.playerbase.widget.BaseVideoView
android:id="@+id/activity_recycler_base_video_type_video_bvv"
android:layout_width="250dp"
android:layout_height="250dp"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:layout_marginTop="20dp"
android:layout_marginBottom="20dp"
android:background="#000000"/>
</FrameLayout>
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ public void getOutline(final View view, final Outline outline) {
selfRect = mRect;
}else{
Rect rect = new Rect();
view.getGlobalVisibleRect(rect);
view.getDrawingRect(rect);
selfRect = RectUtils.getOvalRect(rect);
}
outline.setOval(selfRect);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,14 +45,10 @@ public ViewRoundRectOutlineProvider(float radius, Rect rect) {
@Override
public void getOutline(View view, Outline outline) {
Rect rect = new Rect();
view.getGlobalVisibleRect(rect);
int leftMargin = 0;
int topMargin = 0;
Rect selfRect = new Rect(leftMargin, topMargin,
rect.right - rect.left - leftMargin, rect.bottom - rect.top - topMargin);
view.getDrawingRect(rect);
if(mRect!=null){
selfRect = mRect;
rect = mRect;
}
outline.setRoundRect(selfRect, mRadius);
outline.setRoundRect(rect, mRadius);
}
}

0 comments on commit 46340a3

Please sign in to comment.