这一篇没有什么新的内容 就是改写 红橙Darren视频笔记 仿酷狗侧滑效果 的侧滑的效果
1.去掉淡入淡出效果
2.加上黑色模板效果
效果:
去掉淡入淡出效果很简单 就是注释掉onScrollChanged对应代码即可
而添加灰色蒙板效果的思路也很简单 就是在主体界面添加一个覆盖整体的View 给一个背景,在slidingMenu中获取到这个view 同样在onScrollChanged调整透明度
以下只给出变化的部分
<?xml version="1.0" encoding="utf-8"?><!-- 宽度指定没有意义 KGSlidingMenu会重新赋值 -->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:background="#fff">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="这是主体内容"
android:textSize="20sp" />
<View
android:id="@+id/shadowView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="false"
android:focusable="false"
android:background="#55000000" />
</RelativeLayout>
private View mShadowView;
@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt) {//想象不了alpha值如何计算 就打印log然后思考逻辑
super.onScrollChanged(l, t, oldl, oldt);
//在滑动onScroll的同时调用setTranslationX 让view看起来好像没有滑动 以达到抽屉效果
//比如手指向左滑动 view整体向左滑动 但是view又调用了setTranslationX向右转移 看起来好像没有移动
//这看起来像在一个矩形容器中心放一个球,这时容器向左移动,同时球以相同的速度向右移动,那么球在空间的绝对位置不变 看起来球好像没有移动
mMenu.setTranslationX(l * 0.8f);
//
// //根据滑动x的距离调整左侧菜单的透明度
// float minAlpha = 0.3f;
// float currentMenuAlpha = (mMenuWidth - l) / (float) mMenuWidth * (1 - minAlpha) + minAlpha;
//
// //根据滑动x的距离调整右侧内容的透明度
// float currentContentAlpha = l / (float) mMenuWidth * (1 - minAlpha) + minAlpha;
// mMenu.setAlpha(currentMenuAlpha);
// mContent.setAlpha(currentContentAlpha);
//
// //根据滑动x的距离判断右侧内容缩放的大小 算法和透明度类似
// float minScale = 0.8f;
// float currentContentScale = l / (float) mMenuWidth * (1 - minScale) + minScale;
// //缩放api默认以view的正中心为支点进行缩放 将缩放中心点移动到view的左侧中间位置
// mContent.setPivotX(0);
// mContent.setPivotY(ScreenUtil.getScreenHeight(mContent.getContext())/2);
// mContent.setScaleX(currentContentScale);
// mContent.setScaleY(currentContentScale);
float minAlpha = 0f;
float shadowAlpha = (mMenuWidth - l) / (float) mMenuWidth * (1 - minAlpha) + minAlpha;
mShadowView.setAlpha(shadowAlpha);
}
@Override
protected void onFinishInflate() {
super.onFinishInflate();
//获取KGSlidingMenu的第零个子view 也就是LinearLayout
//虽然用findViewById()更快 但是这样更能清楚的知道各个view直接的层级关系 便于学习
ViewGroup container = (ViewGroup) getChildAt(0);
if (container.getChildCount() != 2) {
throw new RuntimeException("KGSlidingMenu子节点的子view必须是2个!!");
}
mShadowView = container.findViewById(R.id.shadowView);//变化的部分
mShadowView.setAlpha(0f);
//获得menu节点并指宽度
mMenu = (ViewGroup) container.getChildAt(0);
ViewGroup.LayoutParams tempLayoutParams = mMenu.getLayoutParams();
tempLayoutParams.width = mMenuWidth;
mMenu.setLayoutParams(tempLayoutParams);
//获得content节点并指定宽度
mContent = (ViewGroup) container.getChildAt(1);
tempLayoutParams = mContent.getLayoutParams();
tempLayoutParams.width = mMenuWidth + mMenuRightGap;// mMenuWidth + mMenuRightGap 就是屏幕的宽度
mContent.setLayoutParams(tempLayoutParams);
mContent.setOnClickListener(new OnClickListener() {//测试屏蔽点击事件
@Override
public void onClick(View v) {
Toast.makeText(mContent.getContext(), "主体被点击", Toast.LENGTH_SHORT).show();
}
});
}