首先看下UI效果:
这个是我在业余开发的新浪微博广场模块的一个实现页面左右滑动的效果,用到的有android.support.v4.view.ViewPager 实现页面切换+ GridView 的九宫格布局。
下面直接贴代码:
1、/WeiBo_ice/res/layout/search_title.xml < 广场标题布局>
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/search_title_layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/titlebar_bg"> <TextView android:id="@+id/tv_search_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center|center_horizontal" android:text="@string/tabbar_square" android:textSize="@dimen/title_text_size" android:textColor="@color/title_text_color"/> <FrameLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="right|center_vertical" > <ProgressBar android:id="@+id/titleprogressBar" style="@android:attr/progressBarStyleLarge" android:layout_width="30dip" android:layout_height="30dip" android:visibility="gone"/> <ImageView android:id="@+id/title_bt_right" android:layout_width="wrap_content" android:layout_height="wrap_content" android:contentDescription="@string/empty" /> </FrameLayout> </FrameLayout>
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/search_title_layout" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <include android:id="@+id/title" layout="@layout/search_title" /> <FrameLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <!-- 使用ViewPager --> <android.support.v4.view.ViewPager android:id="@+id/search_viewpager" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center" > </android.support.v4.view.ViewPager> <RelativeLayout android:layout_width="fill_parent" android:layout_height="wrap_content" > <LinearLayout android:id="@+id/llguid" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center" android:layout_alignParentBottom="true" android:orientation="horizontal" > <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/guide_round" android:clickable="true" android:layout_margin="8dp" android:contentDescription="@string/empty" /> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/guide_round" android:clickable="true" android:layout_margin="8dp" android:contentDescription="@string/empty" /> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/guide_round" android:clickable="true" android:layout_margin="8dp" android:contentDescription="@string/empty" /> </LinearLayout> </RelativeLayout> </FrameLayout> </LinearLayout>
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="fill_parent" android:orientation="vertical" > <GridView android:id="@+id/myGridView" android:layout_width="fill_parent" android:layout_height="fill_parent" android:numColumns="3" android:verticalSpacing="15dip" android:horizontalSpacing="6dip" android:stretchMode="columnWidth" android:layout_marginTop="20dp" android:gravity="center"> </GridView> </LinearLayout>
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ImageView android:id="@+id/ItemImageView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:contentDescription="@string/empty" android:layout_gravity="center"/> <TextView android:id="@+id/itemTextView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textIsSelectable="false" android:layout_gravity="center" android:gravity="center"/> </LinearLayout>
package com.ice.weibo.activity; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import android.app.Activity; import android.os.Bundle; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager.OnPageChangeListener; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.GridView; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.SimpleAdapter; import com.ice.weibo.R; import com.ice.weibo.util.ConstantS; /** * 广场UI * @author ice * */ public class DiscoveActivity extends Activity { private ViewPager mViewPager; private LinearLayout ll_1,ll_2,ll_3; private GridView view1,view2,view3; private List<View> viewList; //把需要滑动的页卡添加到这个list中 private ImageView[] imageViews; private int currentPosition = 0; // 当前位置 /* * 这里我就偷懒啦、三个切换滑动页面引用的是相同的图标和文字、我就省了去找其他的图片啦 * 我们可以定义三组数组分别放每个界面的图标和文字内容、 * 然后修改下 下面的 setGridViewAdapter() 方法 就行啦... * */ // 定义图标数组 private int[] imageRes = {R.drawable.nine_1,R.drawable.nine_2,R.drawable.nine_3, R.drawable.nine_4,R.drawable.nine_5,R.drawable.nine_6, R.drawable.nine_7,R.drawable.nine_8,R.drawable.nine_9}; //定义标题数组 private String[] itemName = {"微信","微音乐","微魅儿", "微通讯","微短信","微烦皂", "微盟主","微爱心","微互粉" }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.searchinfo); initViews(); Log.d(ConstantS.TAG, "currentPosition:"+currentPosition++); } public void initViews() { mViewPager = (ViewPager) findViewById(R.id.search_viewpager); LayoutInflater lf = getLayoutInflater().from(this); ll_1 = (LinearLayout) lf.inflate(R.layout.ninebox, null); view1 = (GridView) ll_1.findViewById(R.id.myGridView); ll_2 = (LinearLayout) lf.inflate(R.layout.ninebox_2, null); view2 = (GridView) ll_2.findViewById(R.id.myGridView2); ll_3 = (LinearLayout) lf.inflate(R.layout.ninebox_3, null); view3 = (GridView) ll_3.findViewById(R.id.myGridView3); viewList = new ArrayList<View>(); // 将要分页显示的View装入数组中 viewList.add(ll_1); viewList.add(ll_2); viewList.add(ll_3); setGridViewAdapter(view1); setGridViewAdapter(view2); setGridViewAdapter(view3); mViewPager.setAdapter(new MyPagerAdapter(viewList)); mViewPager.setOnPageChangeListener(new myOnPageChangeListener()); LinearLayout llguid = (LinearLayout) findViewById(R.id.llguid); imageViews = new ImageView[viewList.size()]; for(int i= 0;i<viewList.size();i++){ imageViews[i] = (ImageView) llguid.getChildAt(i); imageViews[i].setEnabled(true); imageViews[i].setTag(i); } imageViews[currentPosition].setEnabled(false); } /** * 设置GridView适配器 */ private void setGridViewAdapter(GridView mGridView) { List<HashMap<String, Object>> data = new ArrayList<HashMap<String, Object>>(); int length = itemName.length; for(int i=0;i<length;i++){ HashMap<String,Object> map = new HashMap<String, Object>(); map.put("ItemImageView", imageRes[i]); map.put("ItemTextView", itemName[i]); data.add(map); } SimpleAdapter simpleAdapter = new SimpleAdapter(this, data, R.layout.ninebox_item, new String[]{"ItemImageView","ItemTextView"}, new int[]{R.id.ItemImageView,R.id.itemTextView}); mGridView.setAdapter(simpleAdapter); } class MyPagerAdapter extends PagerAdapter{ List<View> viewList; public MyPagerAdapter(List<View> viewList) { this.viewList = viewList; } @Override public int getCount() { // TODO Auto-generated method stub return viewList.size(); } @Override public boolean isViewFromObject(View arg0, Object arg1) { // TODO Auto-generated method stub return arg0 == arg1; } @Override public void destroyItem(View container, int position, Object object) { // TODO Auto-generated method stub ((ViewPager)container).removeView(viewList.get(position)); } @Override public Object instantiateItem(ViewGroup container, int position) { // TODO Auto-generated method stub container.addView(viewList.get(position)); // Log.d(ConstantS.TAG, "ViewPager--Position:"+position); return viewList.get(position); } } class myOnPageChangeListener implements OnPageChangeListener{ /** * 当滑动状态改变时调用 */ @Override public void onPageScrollStateChanged(int arg0) { // TODO Auto-generated method stub } /** * 当当前页面被滑动时调用 */ @Override public void onPageScrolled(int arg0, float arg1, int arg2) { // TODO Auto-generated method stub } /** * 当新的页面被选中时调用 */ @Override public void onPageSelected(int arg0) { Log.d(ConstantS.TAG, "ViewPager--当前是第几页:"+arg0); for(int i=0;i<imageViews.length;i++){ if(i == arg0){ imageViews[arg0].setEnabled(true); }else{ imageViews[i].setEnabled(false); } } } } }
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:state_enabled="true" android:drawable="@drawable/guide_round_current"></item> <item android:state_enabled="false" android:drawable="@drawable/guide_round_default"></item> </selector>