当前位置:操作系统 > 安卓/Android >>

高仿launcher和墨迹左右拖动效果

 半个月前就有这样的想法,做出一个模仿launcher的效果。自己也曾从网上搜过很多资料,也思考过怎么实现,最终还是参考了别人的资料实现了此效果,也解决了我这半个多月的冥思苦想,再次感谢,今天把代码贴出来供大家学习,因为这方面做得比较好的资料缺失比较少(因为本人搜了很多资料都不能达到效果),如果大家觉得还不错,请顶起。

       


            首先自定义一个 ViewGroup:

 


[html] public class MyScrollLayout extends ViewGroup{ 
 
    private VelocityTracker mVelocityTracker;           // 用于判断甩动手势     
    private static final int SNAP_VELOCITY = 600;         
    private Scroller  mScroller;                        // 滑动控制器     
    private int mCurScreen;                              
    private int mDefaultScreen = 0;                           
    private float mLastMotionX;        
 //   private int mTouchSlop;                            
     
   private OnViewChangeListener mOnViewChangeListener;   
  
    public MyScrollLayout(Context context) { 
        super(context); 
        // TODO Auto-generated constructor stub 
        init(context); 
    }    
    public MyScrollLayout(Context context, AttributeSet attrs) { 
        super(context, attrs); 
        // TODO Auto-generated constructor stub 
        init(context); 
    } 
     
    public MyScrollLayout(Context context, AttributeSet attrs, int defStyle) { 
        super(context, attrs, defStyle); 
        // TODO Auto-generated constructor stub      
        init(context); 
    } 
     
    private void init(Context context) 
    { 
        mCurScreen = mDefaultScreen;           
     //   mTouchSlop = ViewConfiguration.get(getContext()).getScaledTouchSlop();                 
        mScroller = new Scroller(context);  
         
    } 
 
    @Override 
    protected void onLayout(boolean changed, int l, int t, int r, int b) { 
        // TODO Auto-generated method stub       
         if (changed) {     
                int childLeft = 0;     
                final int childCount = getChildCount();                      
                for (int i=0; i<childCount; i++) {     
                    final View childView = getChildAt(i);     
                    if (childView.getVisibility() != View.GONE) {     
                        final int childWidth = childView.getMeasuredWidth();     
                        childView.layout(childLeft, 0,      
                                childLeft+childWidth, childView.getMeasuredHeight());     
                        childLeft += childWidth;     
                    }     
                }     
            }     
    } 
 
    @Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
        // TODO Auto-generated method stub 
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);        
        final int width = MeasureSpec.getSize(widthMeasureSpec);        
        final int widthMode = MeasureSpec.getMode(widthMeasureSpec);       
                 
        final int count = getChildCount();        
        for (int i = 0; i < count; i++) {        
            getChildAt(i).measure(widthMeasureSpec, heightMeasureSpec);        
        }               &n

补充:移动开发 , Android ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,