红橙Darren视频笔记 仿QQ侧滑效果

这一篇没有什么新的内容 就是改写 红橙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();
            }
        });
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值