仿优信二手车品牌选择demo

不知道为啥,markdown编辑器不能用,一打开就奔溃,换个浏览器也不行,重启也不好使,估计是csdn那块出问题了吧;索性这会想写就干脆用普通编辑器写了,排版不好了大伙多担待。项目实现方法如果有更好的还望指出,一起学习。


刚接手一个私活,里边有个类似优信二手车品牌选择的功能。就是下图样式:主页面是个list 然后点击主页面list的item会弹出侧滑栏,并且弹出侧滑栏后主页面的item还可以点击并不同的item对应不同的侧滑栏内容。上网百度了一番,都是简单的侧滑栏效果,没有时间处理,主页面可以点击替换侧滑栏的效果,索性就自己写一个了


优信二手车品牌选择的效果

优信二手车品牌选择效果



自己的demo效果


自己的demo效果


事件分析:其实就是侧滑栏拦截了事件,不叫主页面接收事件。那就重写侧滑栏drawerlayout 重写他的onintercepttouchevent方法  不拦截就可以了。然后在点击主页面的item时处理自己需求的逻辑就ok了   


注意的问题:

1 .  网上有说遇到点击穿透的,意思就是侧滑栏弹出时   有些侧滑栏的按钮没有设置点击事件,然后点击这些按钮的时候会响应主页面对应区域的逻辑;这个解决方法百度一堆,直接在drawerlayout的对应xml里设置clicked属性为true即可  ( android :clickable= "true" )   不过我写的时候没有遇到,但是还是写上吧,防患于未然嘛。
2.  第二个就是事件的处理了,在问题分析说过了
3.  还有就是在xml里边侧滑栏布局要写在主页面的下边,并且设施 layout_gravity 属性。不然没效果
4.  最后一个是需求问题,需求要求滑动主页面list时候侧滑栏关闭,这个简单,直接给主页面list加一个监听就完事了
5.  另外还有个优信主页面的gridview和listview穿插的效果;这个网上代码应该很多,用recyclerview调用gridlayoutmanager的setSpanSizeLookup方法并重写getSpanSize方法然后根据自己的逻辑写就ok了,这个就不多说了下面会给出示例代码



drawerlayout布局示例代码


<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/content_main"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <com.daodan.mytestrecyclerview.MyDrawerLayout
        android:id="@+id/drawerlayout"
        android:clickable="false"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        >
        <!--主布局-->
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
            <android.support.v7.widget.RecyclerView
                android:id="@+id/main_recyclerview"
                android:layout_width="match_parent"
                android:layout_height="match_parent" />
        </LinearLayout>
        <!--侧滑菜单-->
        <LinearLayout
            android:id="@+id/ll_cehua"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_gravity="end"
            android:background="#999999"
            android:orientation="vertical">
            <TextView
                android:layout_width="match_parent"
                android:layout_height="50dp"
                android:gravity="center"
                android:text="可以自定义加一些布局,下边的list可随外部item点击变换内容"/>
            <android.support.v7.widget.RecyclerView
                android:id="@+id/right_recyclerview"
                android:layout_width="match_parent"
                android:layout_height="match_parent" />
            <!--  <FrameLayout
                  android:id="@+id/right_framelayout"
                  android:layout_width="match_parent"
                  android:layout_height="match_parent"/>-->
        </LinearLayout>
    </com.daodan.mytestrecyclerview.MyDrawerLayout>
</RelativeLayout>

drawerlayout重写代码

public class MyDrawerLayout extends DrawerLayout {
    public MyDrawerLayout(Context context){
        this(context, null);
    }
    public MyDrawerLayout(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }
    public MyDrawerLayout(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs,defStyle);
    }
    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev){
        return false;
    }
}


滑动主页面list关闭侧滑栏示例代码

  recyclerview.addOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
                super.onScrollStateChanged(recyclerView, newState);
                if (drawerlayout.isDrawerOpen(Gravity.RIGHT)){
                    drawerlayout.closeDrawers();
                }
            }
        });


主页面穿插list和grid示例代码


final GridLayoutManager manager = new GridLayoutManager(this,2);
 manager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
            @Override
            public int getSpanSize(int position) {
               //这里根据自己的逻辑返回1或者2(因为上面设置了最大2)
            }
        });


感谢: http://stackoverflow.com/questions/18743124/make-main-content-area-active-in-drawerlayout


点我下载源码




  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值