ViewFlipper可以实现view 的切换,GestureDetector可以判别手势的动作,二者想结合,就可以实现一个简单的左右滑入的仿launcher界面,具体步骤如下
1.在新建的工程中创建layout 文件page.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:background="#C6E2FF"
>
<ViewFlipper android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/viewFlipper1"
android:inAnimation="@android:anim/slide_in_left"
android:outAnimation="@android:anim/slide_out_right"
android:layout_gravity="center"
>
</ViewFlipper>
/*分页标志*/
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_gravity="center_horizontal"
android:gravity="bottom" >
<com.digua.fncontact.PageList
android:id="@+id/pagelist"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>
</FrameLayout>
2.创建一个继承activity类PageActivity.java.并实现OnGestureListener,OnTouchListener方法
OngestureListener是手势监听
protected void onCreate(android.os.Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.page);
inflater=LayoutInflater.from(this);
pageList=(PageList)findViewById(R.id.pagelist);
fliper.setOnTouchListener(this);
// 注册一个用于手势识别的类
mGestureDetector = new GestureDetector(this);
// 允许长按住ViewFlipper,这样才能识别拖动等手势
fliper.setLongClickable(true);
init();
};
void init(){
Cursor c=helper.query();
pages=(int)Math.ceil(c.getCount()/pageItems);//界面页数,根据页数动态加载gridview
c.close();
pageList.setAdapter(new PageListAdapter(this, R.layout.pagelist,pages));
for (int i = 0; i < pages; i++) {
/* View layoutview=inflater.inflate(R.layout.pageitem, null);
View view=layoutview.findViewById(R.id.gridView1); */
GridView gridView=new GridView(this);
//LayoutParams;
gridView.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
gridView.setNumColumns(4);
gridView.setVerticalSpacing(16);
gridView.setHorizontalSpacing(16);
gridView.setGravity(Gravity.CENTER);
gridView.setOnTouchListener(this);
gridView.setOnItemClickListener(this);
fliper.addView(gridView);
}
initPages(defaultPage); //初始化页面内容
}
/*初始页面*/
void initPages(int page){
pageList.setCurrentPage(prePage, currentPage);
GridView gridView=(GridView)fliper.getChildAt(page);
Cursor cursor=helper.queryPage(page,flag);//根据页数查找数据
if(cursor!=null){
gridView.setAdapter(new MyAdapter(this, cursor));//装载数据
}
// dump(cursor);
}
/*gesture*/
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
Log.i("debug", "onfling-----------------------");
if (e1.getX() - e2.getX() > FLING_MIN_DISTANCE
&& Math.abs(velocityX) > FLING_MIN_VELOCITY) {
loadNextPage();//下一页
} else if (e2.getX() - e1.getX() > FLING_MIN_DISTANCE
&& Math.abs(velocityX) > FLING_MIN_VELOCITY) {
loadPrepage();上一页
}
return false;
}
/*下一页*/
void loadNextPage(){
prePage=currentPage;
if(currentPage>=pages-1){
currentPage=0;
}else{
currentPage++;
}
Log.i("debug", currentPage+"currentpage");
initPages(currentPage);
fliper.showNext();
Log.i("debug", "---------------------");
}
/*上一页*/
void loadPrepage(){
prePage=currentPage;
if(currentPage<=0){
currentPage=pages-1;
}else{
currentPage--;
}
// fliper.startFlipping();
fliper.showPrevious();
initPages(currentPage);
}
为gridview 装载数据就可以实现一个左右滑入的界面