android - 如何将viewpager的图片与状态栏沉侵
问题描述
如何将viewpager的图片与状态栏沉侵,这该如何做呢???我这里的viewpager不是全屏的,而是占屏幕的1/4.
问题解答
回答1:以前刚好做过一个半成品的app,主页用的刚刚好是题主要的效果.我先抛链接了:点这里,里面有注释的
StatusBarUtil.setTransparent(MainActivity.this);//然后动态的改变Activity的背景就可以实现了
我来更新了:先看布局吧(这里给我这里的示例):
<FrameLayout xmlns:android='http://schemas.android.com/apk/res/android' xmlns:tools='http://schemas.android.com/tools' android:layout_width='match_parent' android:layout_height='match_parent' android:background='@drawable/bg_saber_q' tools:context='didikee.com.demoapk.activity.StatuBarActivity'> <LinearLayoutandroid:layout_width='match_parent'android:layout_height='match_parent'android:orientation='vertical'><FrameLayout android: android:layout_width='match_parent' android:layout_height='400dp' android:background='@drawable/meinv'>//我要把这个 meinv 变为沉浸状态栏,注意层级</FrameLayout><TextView android:layout_width='match_parent' android:layout_height='match_parent' android:textSize='50sp' android:textColor='@color/orange' android:gravity='center' android:text='哈哈哈'/> </LinearLayout></FrameLayout>
然后修改 StatusBarUtil里的方法(注意层级):
private static void setRootView(Activity activity) {ViewGroup rootView = (ViewGroup) ((ViewGroup) activity.findViewById(android.R.id.content)).getChildAt(0);ViewGroup childAt = (ViewGroup) rootView.getChildAt(0);ViewGroup childAt1 = (ViewGroup) childAt.getChildAt(0);//childAt1 这个就是有美女背景图的那个FrameLayout,也是ViewGroup嘛childAt1.setFitsSystemWindows(true);childAt1.setClipToPadding(true); }
demo图:
具体你的项目是什么效果你自己微调吧
-----再更新:轮播有OnPageChangeListener();动态的设置就可以了
/ 2016-10-20 更新答案 */
PS:可能题主已经走了,但是还是写下一下更新,今天碰到类似的需求
Activity 要继承 AppCompatActivity.2.
@Override protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.xxxx);setBarStyle();init(); } public void setBarStyle() {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { // 设置状态栏透明 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);} } //.....
这个时候你的状态栏你就可以使用了.你可以在状态栏填充一个View然后按需求改变这个View的背景透明度
我的 是用ScrollView去做的,所以我监听滚动的距离,贴上我的处理:
mSScrollView.setOnScrollListener(new SScrollView.OnScrollChangedListener() { @Override public void onScrollChanged(int x, int y, int oldX, int oldY) {//状态栏透明度回调final int height = mFLViewpagerHeight - mTitleHeight;if (y <= 0) { //设置标题的背景颜色 mVGTitle.setBackgroundColor(Color.argb((int) 0, 255,255,255)); mTvTitleMiddle.setTextColor(Color.argb((int) 0, 46,46,46)); //这是填充在状态栏的View mStatusBar.setBackgroundColor(Color.argb((int) 0, 204,204,204)); mIvTitleLeft.setImageResource(R.drawable.ic_arrow_left_white); mIvTitleShare.setImageResource(R.drawable.ic_share_pure);} else if (y > 0 && y <= height) { //滑动距离小于banner图的高度时,设置背景和字体颜色颜色透明度渐变 float scale = (float) y / height; float alpha = (255 * scale); mTvTitleMiddle.setTextColor(Color.argb((int) alpha, 46,46,46)); mVGTitle.setBackgroundColor(Color.argb((int) alpha, 255,255,255)); mStatusBar.setBackgroundColor(Color.argb((int) alpha, 204,204,204)); mIvTitleLeft.setImageResource(R.drawable.ic_arrow_left_white); mIvTitleShare.setImageResource(R.drawable.ic_share_pure);} else { //滑动到banner下面设置普通颜色 mVGTitle.setBackgroundColor(Color.argb((int) 255, 255,255,255)); mTvTitleMiddle.setTextColor(Color.argb((int) 255, 46,46,46)); mStatusBar.setBackgroundColor(Color.argb((int) 255, 204,204,204)); mIvTitleLeft.setImageResource(R.drawable.ic_left_arrow_dark); mIvTitleShare.setImageResource(R.drawable.ic_share_dark);}
不知道这个能放视频吗,我用studio录了一个demo,你看看是不是可以实现你的效果.截图传图太慢了http://oahzrw11n.bkt.clouddn....
相关文章:
1. javascript - 在静态页面上用load 引入的页面文件问题?2. javascript - webpack打包后的bundlejs文件代码不知道什么意思.3. Android的webView如何实现网页 录音功能?4. node.js - Linux(CentOs)下hexo生成文章被killed5. android - RxJavar用什么操作符可以使数据每隔一段时间取出一个6. css - 关于ul的布局7. html - 哪些情况下float会失效?8. javascript - vue组件通过eventBus通信时,报错a.$on is not a function9. java - oracle对汉字字段按照拼音排序的函数和sql语句是什么?10. css - 如何使用 vue transition 实现 ios 按钮一样的平滑切换效果
