首先,说下哈 ,这是本人第一次写博客,说实话 ,自定义的view 也不太那个啥,今天参考了
邮电三精-大精wing 的
android自定义viewgroup初步之一----抽屉菜单 ,自己的一些改进和加深,什么都不说了 ,直接上代码 !!!
抽屉效果 :
当然首先应该就是新建DrawerMenu类继承自ViewGroup:
一,写好构造方法,
二,重新onMeasure()方法,主要是获取子view的个数,和ViewGroup的大小宽,高;
三,重写onLayout()方法,layButtom()方法主要是操作最先的那个view 点击它,操作其他的子view
四,toggleMenu() 是对开合状态下要做的一些操作。
代码都给了 ,详情,看代码哈!水平有限,得继续努力啊 !!
备注:有点点小问题我的自View显示少了一个,找不到原因,希望明白的大神 ,告诉我下啊,谢了先..
private View mButton_bottom; private int mWidth_button_buttom, mHeight_buttom_buttom; private int mButtomX; private int mButtonY; private boolean isChanged = true; private int count; private View mFir_Button_bottom; private View mSec_Button_bottom; private View mThi_Button_bottom; private View mFor_Buttom_bottom; public DrawerMenu(Context context) { super(context, null); } public DrawerMenu(Context context, AttributeSet attrs) { this(context, attrs, 0); } public DrawerMenu(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { count = getChildCount(); for (int i = 0; i < count - 1; i++) { measureChild(getChildAt(i), widthMeasureSpec, heightMeasureSpec); } super.onMeasure(widthMeasureSpec, heightMeasureSpec); } @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { if (isChanged) { layButtom(); for (int i = 0; i < count - 1; i++) { View child = getChildAt(i+1); int childWidth = child.getMeasuredWidth(); int childHeight = child.getMeasuredHeight(); // child.layout(0, mButtonY - mHeight_buttom_buttom * (i + 1) * 2, childWidth, getMeasuredHeight()); child.layout(0, mButtonY - childHeight * (i + 1), childWidth, mButtonY - childHeight * i); child.setVisibility(GONE); } } } private void layButtom() { int i = 100; mButton_bottom = getChildAt(0); mButton_bottom.setOnClickListener(this); mFir_Button_bottom = getChildAt(1); mFir_Button_bottom.setOnClickListener(this); mSec_Button_bottom = getChildAt(2); mSec_Button_bottom.setOnClickListener(this); mThi_Button_bottom = getChildAt(3); mThi_Button_bottom.setOnClickListener(this); mFor_Buttom_bottom = getChildAt(4); mFir_Button_bottom.setOnClickListener(this); mWidth_button_buttom = mButton_bottom.getMeasuredWidth(); mHeight_buttom_buttom = mButton_bottom.getMeasuredHeight(); mButtomX = 0; mButtonY = getMeasuredHeight() - mHeight_buttom_buttom; mButton_bottom.layout(mButtomX, mButtonY, mWidth_button_buttom, getMeasuredHeight()); } @Override public void onClick(View v) { switch (v.getId()){ case R.id.iv_01: toggleMenu(); break; case R.id.iv_02: Toast.makeText(getContext(),"第一个抽屉",Toast.LENGTH_LONG).show(); break; case R.id.iv_03: Toast.makeText(getContext(),"第二个抽屉",Toast.LENGTH_LONG).show(); break; case R.id.iv_04: Toast.makeText(getContext(),"第三个抽屉",Toast.LENGTH_LONG).show(); break; case R.id.iv_05: Toast.makeText(getContext(),"第四个抽屉",Toast.LENGTH_LONG).show(); break; default: } } private void toggleMenu() { if (isChanged) { for (int i = 0; i < count-1; i++) { View Achild = getChildAt(i + 1); TranslateAnimation anim = new TranslateAnimation(-Achild.getMeasuredWidth(), 0, 0, 0); anim.setDuration(500 + i * 300); Achild.startAnimation(anim); Achild.setVisibility(VISIBLE); isChanged = false; } }else{ for (int i = 0; i < count-1; i++) { View Achild = getChildAt(i + 1); TranslateAnimation anim = new TranslateAnimation(0, -Achild.getMeasuredWidth(), 0, 0); anim.setDuration(500 + i * 300); Achild.startAnimation(anim); Achild.setVisibility(GONE); isChanged = true; } } }
activity_main.xml的内容如下:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <com.company.kl.customviewgroup.DrawerMenu android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:id="@+id/iv_01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_launcher" /> <ImageView android:id="@+id/iv_02" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/aa" /> <ImageView android:id="@+id/iv_03" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/aa" /> <ImageView android:id="@+id/iv_04" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/aa" /> <ImageView android:id="@+id/iv_05" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/aa" /> </com.company.kl.customviewgroup.DrawerMenu> </RelativeLayout>
直接上Demo
也可以到:http://download.csdn.net/detail/kunglun/9800389下载