Android App的标题栏随ScrollView的滑动改变透明度
2017-05-12 18:40
603 查看
记录一下前一段时间做项目遇到的标题栏透明度随ScrollView的滚动变化问题的解决问题
描述:前几天项目里面有一个需求,就是根据ScrollView的滚动来设置标题栏的透明度,于是我就监听scrollView的setOnScrollChangeListener方法完成了,本来做好项目后没任何问题,但是回家后用一个4.4的手机测试发现奔了,打印后发现是由于ScrollView的setOnScrollChangeListener监听在Api23以上才可以使用,所以才导致的奔溃,解决办法很简单,就是自己写一个类MyScrollView,继承自ScrollView,在MyScrollView类里面重写onScrollChanged方法 即可实现,下面附上代码:
一、先实现类MyScrollView
public class MyScrollView extends ScrollView { private OnScrollChangeListener scrollChangeListener = null; public MyScrollView(Context context) { super(context); } public MyScrollView(Context context, AttributeSet attrs) { super(context, attrs); } public MyScrollView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected void onScrollChanged(int x, int y, int oldx, int oldy) { super.onScrollChanged(x, y, oldx, oldy); if (scrollChangeListener != null) { scrollChangeListener.onScrollChanged(this, x, y, oldx, oldy); } } public void setScrollViewListener(OnScrollChangeListener onScrollChangeListener) { this.scrollChangeListener = onScrollChangeListener; } public interface OnScrollChangeListener { void onScrollChanged(MyScrollView scrollView, int x, int y, int oldx, int oldy); } }
二、使用
在xml引用MyScrollView,然后在Activity里面通过findViewById()找到MyScrollView 调用setScrollViewListener方法scrollView.setScrollViewListener(new MyOnScrollChangeListener());
/** * ScrollVoiew滑动监听 */ private class MyOnScrollChangeListener implements MyScrollView.OnScrollChangeListener { @Override public void onScrollChanged(MyScrollView, int x, int y, int oldx, int oldy) { //根据scrollview滑动更改标题栏透明度 changeAphlaTitle(oldy, y); } } /** * 根据内容窗体的移动改变标题栏背景透明度 * * @param startY scrollview开始滑动的y坐标(相对值) * @param endY scrollview结束滑动的y坐标(相对值) */ private void changeAphlaTitle(int startY, int endY) { //获取到状态栏的高度 int statusBarHeight = getStatusBarHeight(mActivity); //获取标题高度 int titleHeight = llTop.getLayoutParams().height; //获取背景高度 int backHeight = DisplayUtil.dp2px(mActivity, 250); //获取控件的绝对位置坐标 int[] location = new int[2]; rlBgUnit.getLocationInWindow(location); //从屏幕顶部到控件顶部的坐标位置Y int currentY = location[1]; //表示回到原位(滑动到顶部) if (currentY >= statusBarHeight) { llTop.setBackgroundColor(Color.argb(0, 0, 0, 0)); } //顶部条目移除或移入屏幕的过程中;颜色透明度改变 if (currentY < statusBarHeight && currentY >= -backHeight) { //计算出滚动过程中改变的透明值 double changeValue = ((double) Math.abs(currentY) / (statusBarHeight + backHeight)) * 77; //判断是向上还是向下 if (endY > startY) {//向上;透明度值增加,实际透明度减小 llTop.setBackgroundColor(Color.argb((int) changeValue, 0, 0, 0)); } else if (endY < startY) {//向下;透明度值减小,实际透明度增加 llTop.setBackgroundColor(Color.argb((int) changeValue, 0, 0, 0)); } } //顶部条目移除屏幕 if (currentY < -backHeight) { llTop.setBackgroundColor(Color.argb(77, 0, 0, 0)); } } /** * 获取通知栏高度 * * @param context 上下文 * @return 通知栏高度 */ private int getStatusBarHeight(Context context) { Class<?> c = null; Object obj = null; Field field = null; int x = 0, statusBarHeight = 0; try { c = Class.forName("com.android.internal.R$dimen"); obj = c.newInstance(); field = c.getField("status_bar_height"); x = Integer.parseInt(field.get(obj).toString()); statusBarHeight = context.getResources().getDimensionPixelSize(x); } catch (Exception e1) { e1.printStackTrace(); } return statusBarHeight; } /** * 将dip或dp值转换为px值,保证尺寸大小不变 * * @param dipValue (DisplayMetrics类中属性density) * @return */ public static int dp2px(Context context, float dipValue) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (dipValue * scale + 0.5f); }
相关文章推荐
- Android ScrollView .顶部栏滑动透明度改变,底部栏滑到特定位置显示或隐藏效果
- android scrollview 滑动 改变标题栏颜色
- Android 标题栏和状态栏随ScrollView滑动颜色改变轻松实现
- ScrollView滚动改变标题栏透明度
- Android 滑动改变标题/栏导航栏颜色、透明度
- 【android】仿知乎ScrollView滚动改变标题栏透明度
- Android改变标题栏的透明度
- Android 超简单音乐播放器(一)主界面嘛(fragment+ViewPage)(View Pager滑动)( 标题栏的隐藏和状态栏的改变)
- Android ScrollView滑动实现仿QQ空间标题栏渐变
- Android开发——seekBar滑动条滑动改变图片的透明度
- 随着ScrollView上下滚动 标题栏透明度随之而改变
- 【android】仿知乎ScrollView滚动改变标题栏透明度
- APP实用开发—ScrollView滑动标题栏颜色渐变
- Android中自定义ScrollView的滑动监听事件,并在滑动时渐变标题栏背景颜色
- Android之scrollview滑动使标题栏渐变背景色的实例代码
- Android中Toolbar随着ScrollView滑动透明度渐变效果实现
- Android ScrollView滑动标题栏变色
- ScrollView滑动实现标题栏透明度随之渐变
- 【android】仿知乎ScrollView滚动改变标题栏透明度
- 【Android视图效果】仿QQ空间滑动改变标题栏颜色