在线直播系统源码,android沉浸式页面实现

在线直播系统源码,android沉浸式页面实现

1.依赖

 

1
dependencies {<br>//沉浸式状态栏<br>// After AndroidX<br>implementation ('com.github.niorgai:StatusBarCompat:2.3.3', {<br>    exclude group: 'androidx.appcompat:appcompat'<br>    exclude group: 'com.google.android.material:material'<br>})<br>    //Google AutoValue<br>    compileOnly 'com.google.auto.value:auto-value:1.5.2'<br>    annotationProcessor "com.google.auto.value:auto-value:1.5.2"<br>    }

2.页面布局

 

1
<?xml version="1.0" encoding="utf-8"?><br><androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"<br>    xmlns:app="http://schemas.android.com/apk/res-auto"<br>    android:layout_width="match_parent"<br>    android:layout_height="match_parent"<br>    android:orientation="vertical"><br>    <androidx.swiperefreshlayout.widget.SwipeRefreshLayout<br>        android:id="@+id/srl_index"<br>        android:layout_width="match_parent"<br>        android:layout_height="match_parent"><br>        <androidx.recyclerview.widget.RecyclerView<br>            android:id="@+id/rv_index"<br>            android:layout_width="match_parent"<br>            android:layout_height="match_parent" /><br>    </androidx.swiperefreshlayout.widget.SwipeRefreshLayout><br>    <androidx.appcompat.widget.Toolbar<br>        android:id="@+id/tb_index"<br>        android:layout_width="match_parent"<br>        android:layout_height="80dp"<br>        android:background="#66319bd2"<br>        app:contentInsetStart="0dp"<br>        app:layout_scrollFlags="scroll|enterAlways|snap"<br>        app:popupTheme="@style/ThemeOverlay.AppCompat.Light"<br>        app:layout_behavior="com.gentek.police.main.index.TranslucentBehavior"<br>        ><br>        <androidx.appcompat.widget.AppCompatTextView<br>            android:layout_width="match_parent"<br>            android:layout_height="match_parent"<br>            android:layout_gravity="center"<br>            android:gravity="center|start"<br>            android:paddingLeft="15dp"<br>            android:text="打卡签到"<br>            android:textColor="@android:color/white"<br>            android:textSize="18sp" /><br>    </androidx.appcompat.widget.Toolbar><br></androidx.coordinatorlayout.widget.CoordinatorLayout>

 

3.配置滑动变化的颜色

需要注意的是Toolbar里的属性app:layout_behavior="com.gentek.police.main.index.TranslucentBehavior",其

TranslucentBehavior类是自己定义的

 

1
<br>/**<br> * Created by kly on 2019/11/30.<br> */<br>@AutoValue<br>public abstract class RgbValue {<br>    public abstract int red();<br>    public abstract int green();<br>    public abstract int blue();<br>// * 注意,在new AutoValue_RgbValue(red,green,blue)之前,需要先Rebuild Project<br>    public static RgbValue create(int red,int green,int blue){<br>        return new AutoValue_RgbValue(red,green,blue);<br>    }<br>}<br>/**<br> * Created by kly on 2019/11/30.<br> */<br>@SuppressWarnings("unused")<br>public class TranslucentBehavior extends CoordinatorLayout.Behavior<Toolbar> {<br>    //顶部距离<br>    private int mDistanceY=0;<br>    //颜色变化速度<br>    private static final int SHOW_SPEED=3;<br>    //定义变化的颜色<br>    private final RgbValue RGB_VALUE=RgbValue.create(255,124,2);<br>    public TranslucentBehavior(Context context, AttributeSet attrs) {<br>        super(context, attrs);<br>    }<br>    @Override<br>    public boolean layoutDependsOn(CoordinatorLayout parent, Toolbar child, View dependency) {<br>        return dependency.getId()== R.id.rv_index;<br>    }<br>    @Override<br>    public boolean onStartNestedScroll(@NonNull CoordinatorLayout coordinatorLayout, @NonNull Toolbar child, @NonNull View directTargetChild, @NonNull View target, int axes, int type) {<br>        return true;<br>    }<br>    @Override<br>    public void onNestedPreScroll(@NonNull CoordinatorLayout coordinatorLayout, @NonNull Toolbar child, @NonNull View target, int dx, int dy, @NonNull int[] consumed, int type) {<br>        super.onNestedPreScroll(coordinatorLayout, child, target, dx, dy, consumed, type);<br>        //增加滑动距离<br>        mDistanceY+=dy;<br>        //toolbar的高度<br>        final int targetHeight=child.getBottom();<br>        //当滑动时,并距离小于toolbar高度的时候,调整渐变色<br>        if(mDistanceY > 0 && mDistanceY <= targetHeight){<br>            final float scale=(float) mDistanceY / targetHeight;<br>            final float alpha=scale * 255;<br>            child.setBackgroundColor(Color.argb((int) alpha,RGB_VALUE.red(),RGB_VALUE.green(),RGB_VALUE.blue()));<br>        }else if(mDistanceY > targetHeight){<br>            child.setBackgroundColor(Color.rgb(RGB_VALUE.red(),RGB_VALUE.green(),RGB_VALUE.blue()));<br>        }<br>    }<br>}

 

4.初始化沉浸式状态栏

 

1
<br>public class ExampleActivity extends Activity  {<br>    @Override<br>    protected void onCreate(@Nullable Bundle savedInstanceState) {<br>        super.onCreate(savedInstanceState);<br>        <br>        StatusBarCompat.translucentStatusBar(this,true);<br>    }<br>}

 

以上就是在线直播系统源码,android沉浸式页面实现, 更多内容欢迎关注之后的文章

 

posted @   云豹科技-苏凌霄  阅读(81)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
历史上的今天:
2021-08-25 直播带货平台源码Android实现自定义圆形、方形输入框
2021-08-25 Android小视频app源码图片转场和轮播特效
2021-08-25 一对一直播系统开发Jetpact Compose状态管理存储状态的方式
点击右上角即可分享
微信分享提示