在线直播系统源码,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沉浸式页面实现, 更多内容欢迎关注之后的文章
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
2021-08-25 直播带货平台源码Android实现自定义圆形、方形输入框
2021-08-25 Android小视频app源码图片转场和轮播特效
2021-08-25 一对一直播系统开发Jetpact Compose状态管理存储状态的方式