重写viewgroup实现左右滑动(修改)

来源:互联网 发布:js select选中的事件 编辑:程序博客网 时间:2024/04/29 20:08

这段代码是具有以前写过的代码修改的(其实是全部更改了,不过思路是一样的),更多的解析在我的那篇上下滑动view里,原理都是一样的

package com.java.zh_app.myviews;import android.content.Context;import android.util.AttributeSet;import android.view.MotionEvent;import android.view.View;import android.view.ViewGroup;import android.widget.Scroller;import com.java.zh_app.R;public class MyLRSlideViewGroup extends ViewGroup {private Scroller scroller;private final static int canTragviewDp = 60;private static int curr_view = 2, can_tragview = 0;private void Int_paras(Context context) {scroller = new Scroller(context);setBackgroundColor(context.getResources().getColor(R.color.app_orange_shallow_color));curr_view = 2;can_tragview = 0;}public MyLRSlideViewGroup(Context context) {super(context);Int_paras(context);}public MyLRSlideViewGroup(Context context, AttributeSet attrs) {super(context, attrs);Int_paras(context);}public MyLRSlideViewGroup(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);Int_paras(context);}@Overridepublic void computeScroll() {if (scroller.computeScrollOffset()) {getChildAt(1).layout(scroller.getCurrX(), 0,scroller.getCurrX() + (getChildAt(1).getWidth()),getHeight());getChildAt(0).layout(scroller.getCurrX() - (getChildAt(1).getWidth()), 0,scroller.getCurrX(), getHeight());postInvalidate();}super.computeScroll();}@Overrideprotected void onLayout(boolean changed, int l, int t, int r, int b) {int viewcount = getChildCount();for (int count = 0; count < viewcount; count++) {View child = getChildAt(count);int height = child.getMeasuredHeight();int wdith = child.getMeasuredWidth();child.layout(0, 0, wdith, height);}}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {// TODO Auto-generated method stubsuper.onMeasure(widthMeasureSpec, heightMeasureSpec);int width = MeasureSpec.getSize(widthMeasureSpec);int height = MeasureSpec.getSize(heightMeasureSpec);setMeasuredDimension(width, height);for (int i = 0; i < getChildCount(); i++) {getChildAt(i).measure(widthMeasureSpec, heightMeasureSpec);}}public void ShowMenu(float currN, int dis) {scroller.startScroll((int) currN, 0, dis, 0);invalidate();}public void OpenMenu(float currN, float currX) {scroller.startScroll((int) currN, 0,(getWidth() - (int) currN), 0);invalidate();}public void CloseMenu(float currN, float currX) {scroller.startScroll((int) currN, 0, -(int) currN, 0);invalidate();}@Overridepublic boolean dispatchTouchEvent(MotionEvent ev) {super.dispatchTouchEvent(ev);switch (ev.getAction()) {case MotionEvent.ACTION_MOVE:if (can_tragview == 1) {ShowMenu(ev.getX(), 2);} else if (can_tragview == 2) {ShowMenu(ev.getX(), -2);}break;case MotionEvent.ACTION_UP:if (can_tragview != 0 && ev.getX() < getWidth() / 2) {CloseMenu(getX(), 0);can_tragview = 2;curr_view = 2;} else if (can_tragview != 0 && ev.getX() >= getWidth() / 2) {OpenMenu(ev.getX(), 0);can_tragview = 1;curr_view = 1;}break;default:break;}return true;}@Overridepublic boolean onInterceptTouchEvent(MotionEvent ev) {super.onInterceptTouchEvent(ev);if (ev.getX() < canTragviewDp && curr_view == 2) {can_tragview = 1;return true;} else if (ev.getX() > (getWidth() - canTragviewDp) && curr_view == 1) {can_tragview = 2;return true;} else {can_tragview = 0;}return false;}}


0 0
原创粉丝点击