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

android 仿iphone主题冰山一角

     现在很多第三方Launcher((如360Launcher,GoLauncher)带有iphone主题,相信玩Android的人大都知道。
 
     本例实现仿iphone主题的launcher的冰山一角。如下图:
 
  \
 
     从效果看,大概就能猜出用什么控件类(支持左右滑动的控件类+GridView),支持左右滑动的控件类,有很多了比如常用的Gallery,ViewPager,ViewFlipper,ViewFlow等等,本例自定义继承ViewGroup的。看过launcher源码的人应该都知道 有个Workspace类继承ViewGroup实现主菜单的。
 
 
 
[html] 
<?xml version="1.0" encoding="utf-8"?>  
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    android:layout_width="fill_parent"  www.zzzyk.com
    android:layout_height="fill_parent"  
    android:orientation="vertical" >  
  
    <com.xyz.workspace.Workspace  
        android:id="@+id/workspace"  
        android:layout_width="fill_parent"  
        android:layout_height="fill_parent" />  
  
    <com.xyz.workspace.PageIndicator  
        android:id="@+id/indicator"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:layout_alignParentBottom="true"  
        android:layout_centerHorizontal="true"  
        android:layout_marginBottom="20dip" />  
  
</RelativeLayout>  
 
    第一个自定义类Workspace就是实现左右滑动的,第二个类PageIndicator做指示器用。
Workspace.java
 
[java]  
package com.xyz.workspace;  
  
import java.util.List;  
  
import android.content.Context;  
import android.util.AttributeSet;  
import android.view.MotionEvent;  
import android.view.VelocityTracker;  
import android.view.View;  
import android.view.ViewConfiguration;  
import android.view.ViewGroup;  
import android.widget.Scroller;  
  
public class Workspace extends ViewGroup {  
  
    private static final String TAG = "Workspace";  
    private Scroller mScroller;  
    private VelocityTracker mVelocityTracker;  
  
    private static final int DEFAULT_SCREEN = 0;  
    private static final int TOUCH_STATE_REST = 0;  
    private static final int TOUCH_STATE_SCROLLING = 1;  
    private static final int SNAP_VELOCITY = 600;  
    public static final int APP_PAGE_SIZE = 16;  
  
    private int mCurScreen;  
    private int mTouchState = TOUCH_STATE_REST;  
    private int mTouchSlop;  
    private float mLastMotionX;  
    private float mLastMotionY;  
  
    private OnViewChangedListener mOnViewChangedListener;  
  
    public Workspace(Context context, AttributeSet attrs) {  
        this(context, attrs, 0);  
        // TODO Auto-generated constructor stub  
    }  
  
    public Workspace(Context context, AttributeSet attrs, int defStyle) {  
        super(context, attrs, defStyle);  
        // TODO Auto-generated constructor stub  
        mScroller = new Scroller(context);  
        mCurScreen = DEFAULT_SCREEN;  
        mTouchSlop = ViewConfiguration.get(getContext()).getScaledTouchSlop();  
    }  
  
    @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) {  
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);  
  
        final int width = MeasureSpec.getSize(widthMeasureSpec);  
        final int widthMode = MeasureSpec.getMode(widthMeasureSpec);  
        if (widthMode != MeasureSpec.EXACTLY) {  
            throw new IllegalStateException(  
                    "ScrollLayout only canmCurScreen run at EXACTLY mode!");  
        }  
  
        final int heightMode = MeasureSpec.getMode(heightMeasureSpec);  
        if (heightMode != M
补充:移动开发 , Android ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,