android学习之-ViewPager

使用viewpager来做菜单和页面导航等。

第一种效果:带圆点的滚动效果:



源码:

// 3.图片展示转换
	private void initViewPager2() {
		imageViewPager = (ViewPager) this.findViewById(R.id.image_vPager);
		views = new ArrayList<View>();
		inflater = getLayoutInflater();

		view1 = inflater.inflate(R.layout.book_layout3, null);
		view2 = inflater.inflate(R.layout.book_layout3, null);
		view3 = inflater.inflate(R.layout.book_layout3, null);

		views.add(view1);
		views.add(view2);
		views.add(view3);
		
		view1.setOnClickListener(new ViewOnClickListener(BookActivity.this, 0));
		view2.setOnClickListener(new ViewOnClickListener(BookActivity.this, 1));
		view3.setOnClickListener(new ViewOnClickListener(BookActivity.this, 2));

		initData(view1, view2, view3);

		imageViews = new ImageView[views.size()];
		
		imageViews[0] = (ImageView) this.findViewById(R.id.group_image1);
		imageViews[1] = (ImageView) this.findViewById(R.id.group_image2);
		imageViews[2] = (ImageView) this.findViewById(R.id.group_image3);

		imageViewPager.setAdapter(new MyViewPageAdapter(views));
		
		imageViewPager.setCurrentItem(0);
		imageViewPager.setOnPageChangeListener(new GuidePageChangeListener(
				BookActivity.this, imageViews));
	}
// 装换中的图片
	private void initData(View view1, View view2, View view3) {
		ImageView imageView11 = (ImageView) view1
				.findViewById(R.id.book_comic_image);
		ImageView imageView22 = (ImageView) view2
				.findViewById(R.id.book_comic_image);
		ImageView imageView33 = (ImageView) view3
				.findViewById(R.id.book_comic_image);

		if (ComicData.zhanshiComicList.size() > 0) {
			imageView11.setImageBitmap(CacheManager
					.loadCacheBitmapByUrl(ComicData.zhanshiComicList.get(0)
							.getImageUrl()));
			imageView22.setImageBitmap(CacheManager
					.loadCacheBitmapByUrl(ComicData.zhanshiComicList.get(1)
							.getImageUrl()));
			imageView33.setImageBitmap(CacheManager
					.loadCacheBitmapByUrl(ComicData.zhanshiComicList.get(2)
							.getImageUrl()));
		}
	}

对应的layout资源:
 <android.support.v4.view.ViewPager
            android:id="@+id/vPager"
            android:layout_width="wrap_content"
            android:layout_height="800dp" />
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#FFFFFF" >


    <ImageView
        android:id="@+id/book_comic_image"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="@drawable/book_comic"
        android:scaleType="fitXY" />


</RelativeLayout>

对应的viewpager的adapter

package com.enterise.comic.manyu.listener;

import java.util.List;

import android.support.v4.view.PagerAdapter;
import android.view.View;
import android.view.ViewGroup;
/**
 * ViewPager的适配器
 * 
 * 主要是用于显示个数和指针
 * @author Always
 *
 */
public class MyViewPageAdapter extends PagerAdapter{
	private List<View> mListViews;
	
	public MyViewPageAdapter(List<View> mListViews) {
		this.mListViews = mListViews;
	}

	@Override
	public void destroyItem(ViewGroup container, int position, Object object) 	{	
		container.removeView(mListViews.get(position));
	}


	@Override
	public Object instantiateItem(ViewGroup container, int position) {			
		 container.addView(mListViews.get(position), 0);
		 return mListViews.get(position);
	}

	@Override
	public int getCount() {			
		return  mListViews.size();
	}
	
	@Override
	public boolean isViewFromObject(View arg0, Object arg1) {			
		return arg0==arg1;
	}
}

页面滑动时的监听器

package com.enterise.comic.manyu.listener;

import android.content.Context;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.widget.ImageView;

import com.enterise.comic.manyu.activity.R;

/**
 * 页面滑动监听器
 * 
 * @author Always
 * 
 */
public class GuidePageChangeListener implements OnPageChangeListener {

	private ImageView[] imageViews;
	private Context context;

	public GuidePageChangeListener(Context context, ImageView[] imageViews) {
		this.context = context;
		this.imageViews = imageViews;
	}
	@Override
	public void onPageScrollStateChanged(int arg0) {
	}

	@Override
	public void onPageScrolled(int arg0, float arg1, int arg2) {
	}

	@Override
	public void onPageSelected(int arg0) {
		
		for (int i = 0; i < imageViews.length; i++) {
			imageViews[arg0].setBackgroundResource(R.drawable.point_white);
			if (arg0 != i) {
				imageViews[i].setBackgroundResource(R.drawable.point_gray);
			}
		}
		/*//跳转
		if (isMainActivity || arg0 == 2) {
			try {
				System.out.println("GuidePageChangeListener.onPageSelected()");
				new Thread().sleep(2000);
				Intent intent = new Intent(context, GroupActivity.class);
				context.startActivity(intent);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}*/

	}

}

2.第二种是头部的图标导航效果:

效果图:



一些代码如下:

layout:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
	
    <com.enterise.comic.manyu.view.ScrollView1
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        >
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

        <RelativeLayout
            android:layout_width="fill_parent"
            android:layout_height="150.0dip" >

            <android.support.v4.view.ViewPager
                android:id="@+id/image_vPager"
                android:layout_width="fill_parent"
                android:layout_height="200.0dip" />

            <LinearLayout
                android:id="@+id/book_viewGroup"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentBottom="true"
                android:layout_alignParentRight="true"
                android:layout_marginBottom="10dp"
                android:orientation="horizontal" >

                <ImageView
                    android:id="@+id/group_image1"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginRight="10dp"
                    android:background="@drawable/point_white" />

                <ImageView
                    android:id="@+id/group_image2"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginRight="10dp"
                    android:background="@drawable/point_gray" />

                <ImageView
                    android:id="@+id/group_image3"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginRight="10dp"
                    android:background="@drawable/point_gray" />
            </LinearLayout>
        </RelativeLayout>

        <LinearLayout
            android:id="@+id/linearLayout2"
            android:layout_width="fill_parent"
            android:layout_height="40.0dip"
            android:background="#FFFFFF" >

            <TextView
                android:id="@+id/text1"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:layout_weight="1.0"
                android:gravity="center"
                android:text="推荐"
                android:textColor="#8d8d8d"
                android:textSize="20.0dip" />

            <TextView
                android:id="@+id/text2"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:layout_weight="1.0"
                android:gravity="center"
                android:text="排行"
                android:textColor="#8d8d8d"
                android:textSize="20.0dip" />

            <TextView
                android:id="@+id/text3"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:layout_weight="1.0"
                android:gravity="center"
                android:text="最新"
                android:textColor="#8d8d8d"
                android:textSize="20.0dip" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="1dp"
            android:background="#858585" >
            <ImageView
                android:id="@+id/cursor"
                android:layout_width="fill_parent"
                android:layout_height="1dp"
                android:scaleType="matrix"
                android:src="@drawable/guide_line" />
        </LinearLayout>

        <android.support.v4.view.ViewPager
            android:id="@+id/vPager"
            android:layout_width="wrap_content"
            android:layout_height="800dp" />
        
    </LinearLayout>
</com.enterise.comic.manyu.view.ScrollView1>
</LinearLayout>

activity:

package com.enterise.comic.manyu.activity;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.graphics.Matrix;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v4.view.ViewPager;
import android.util.DisplayMetrics;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;

import com.enterise.comic.manyu.adapter.BookCommonAdapter;
import com.enterise.comic.manyu.adapter.BookTuiJianAdapter;
import com.enterise.comic.manyu.data.CacheManager;
import com.enterise.comic.manyu.data.ComicData;
import com.enterise.comic.manyu.data.IContentListener;
import com.enterise.comic.manyu.data.ResponseData;
import com.enterise.comic.manyu.domain.ComicDetail;
import com.enterise.comic.manyu.http.task.Task;
import com.enterise.comic.manyu.listener.GuidePageChangeListener;
import com.enterise.comic.manyu.listener.MyOnPageChangeListener;
import com.enterise.comic.manyu.listener.MyViewPageAdapter;
import com.enterise.comic.manyu.utils.TextUtil;
import com.enterise.comic.manyu.utils.ViewUtil;

/**
 * 书城
 * 
 * @author Always
 * 
 */
@SuppressLint("HandlerLeak")
public class BookActivity extends Activity {
	
	private static final int REFLUSH_IMAGE = 10002;

	private ViewPager imageViewPager;// 图片内容(上面)
	private ViewPager viewPager;// 漫画内容内容(下面)
	
	private ImageView imageView;// 动画图片
	private TextView textView1, textView2, textView3;
	private List<View> views;// Tab页面列表
	private int offset = 0;// 动画图片偏移量
	private int currIndex = 0;// 当前页卡编号
	private int bmpW;// 动画图片宽度
	private View view1, view2, view3;// 各个页卡
	
	private ImageView[] imageViews;
	private List<TextView> textList;

	private LayoutInflater inflater;

	GridView tuijianView;
	ListView paihangView;
	ListView zuixinView;
	
	BookTuiJianAdapter tuijianAdapter;
	BookCommonAdapter paihangAdapter;
	BookCommonAdapter zuixinAdapter;
	

	List<ComicDetail> tuijianComicList = new ArrayList<ComicDetail>();
	List<ComicDetail> paihangComicList = new ArrayList<ComicDetail>();
	List<ComicDetail> zuixinComicList = new ArrayList<ComicDetail>();
	List<ComicDetail> zhanshiComicList = new ArrayList<ComicDetail>();
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_book);
		
		// 1.计算页卡滑动的数据
		initImageData();
		
		// 2.初始化头标
		initTextView();
		
		// 3.加载viewpage
		initViewPager2();
		initViewPager();
	}

	/**
	 * 1.初始化动画,这个就是页卡滑动时,下面的横线也滑动的效果,在这里需要计算一些数据
	 */
	private void initImageData() {
		imageView = (ImageView) findViewById(R.id.cursor);
		bmpW = BitmapFactory.decodeResource(getResources(), R.drawable.a)
				.getWidth();// 获取图片宽度
		DisplayMetrics dm = new DisplayMetrics();
		getWindowManager().getDefaultDisplay().getMetrics(dm);
		int screenW = dm.widthPixels;// 获取分辨率宽度
		offset = (screenW / 3 - bmpW) / 2;// 计算偏移量
		Matrix matrix = new Matrix();
		matrix.postTranslate(offset, 0);
		imageView.setImageMatrix(matrix);// 设置动画初始位置
	}

	/**
	 * 2. 初始化头标
	 */
	private void initTextView() {
		textView1 = (TextView) findViewById(R.id.text1);
		textView2 = (TextView) findViewById(R.id.text2);
		textView3 = (TextView) findViewById(R.id.text3);

		textView1.setTextColor(Color.parseColor("#ff9000"));

		textList = new ArrayList<TextView>();
		textList.add(textView1);
		textList.add(textView2);
		textList.add(textView3);

		textView1.setOnClickListener(new MyOnClickListener(0));
		textView2.setOnClickListener(new MyOnClickListener(1));
		textView3.setOnClickListener(new MyOnClickListener(2));
	}

	// 3.图片展示转换
	private void initViewPager2() {
		imageViewPager = (ViewPager) this.findViewById(R.id.image_vPager);
		views = new ArrayList<View>();
		inflater = getLayoutInflater();

		view1 = inflater.inflate(R.layout.book_layout3, null);
		view2 = inflater.inflate(R.layout.book_layout3, null);
		view3 = inflater.inflate(R.layout.book_layout3, null);

		views.add(view1);
		views.add(view2);
		views.add(view3);
		
		view1.setOnClickListener(new ViewOnClickListener(BookActivity.this, 0));
		view2.setOnClickListener(new ViewOnClickListener(BookActivity.this, 1));
		view3.setOnClickListener(new ViewOnClickListener(BookActivity.this, 2));

		initData(view1, view2, view3);

		imageViews = new ImageView[views.size()];
		
		imageViews[0] = (ImageView) this.findViewById(R.id.group_image1);
		imageViews[1] = (ImageView) this.findViewById(R.id.group_image2);
		imageViews[2] = (ImageView) this.findViewById(R.id.group_image3);

		imageViewPager.setAdapter(new MyViewPageAdapter(views));
		
		imageViewPager.setCurrentItem(0);
		imageViewPager.setOnPageChangeListener(new GuidePageChangeListener(
				BookActivity.this, imageViews));
	}

	/**
	 * 初始化,viewpager数据(底部)
	 */
	private void initViewPager() {
		viewPager = (ViewPager) findViewById(R.id.vPager);
		views = new ArrayList<View>();
		LayoutInflater inflater = getLayoutInflater();
		view1 = inflater.inflate(R.layout.book_layout1, null);
		view2 = inflater.inflate(R.layout.book_layout2, null);
		view3 = inflater.inflate(R.layout.book_layout2, null);
		views.add(view1);
		views.add(view2);
		views.add(view3);
		viewPager.setAdapter(new MyViewPageAdapter(views));
		viewPager.setCurrentItem(0);
		viewPager.setOnPageChangeListener(new MyOnPageChangeListener(offset,
				bmpW, currIndex, imageView, textList));

		initData2Views(view1, view2, view3);
	}

	// 装换中的图片
	private void initData(View view1, View view2, View view3) {
		ImageView imageView11 = (ImageView) view1
				.findViewById(R.id.book_comic_image);
		ImageView imageView22 = (ImageView) view2
				.findViewById(R.id.book_comic_image);
		ImageView imageView33 = (ImageView) view3
				.findViewById(R.id.book_comic_image);
		
		if(ComicData.zhanshiComicList.size() > 0){
			imageView11.setImageBitmap(CacheManager.loadCacheBitmapByUrl(ComicData.zhanshiComicList.get(0).getImageUrl()));
			imageView22.setImageBitmap(CacheManager.loadCacheBitmapByUrl(ComicData.zhanshiComicList.get(1).getImageUrl()));
			imageView33.setImageBitmap(CacheManager.loadCacheBitmapByUrl(ComicData.zhanshiComicList.get(2).getImageUrl()));
		}
	}

	/**
	 * 初始化 三个页面的数据
	 * 
	 * @param view1
	 * @param view2
	 * @param view3
	 */
	private void initData2Views(View view1, View view2, View view3) {
		tuijianView = (GridView) view1.findViewById(R.id.gridview);
		paihangView = (ListView) view2.findViewById(R.id.me_layout2_listview);
		zuixinView = (ListView) view3.findViewById(R.id.me_layout2_listview);

		tuijianAdapter = new BookTuiJianAdapter(BookActivity.this, ComicData.tuijianComicList);
		paihangAdapter = new BookCommonAdapter(BookActivity.this, ComicData.paihangComicList);
		zuixinAdapter = new BookCommonAdapter(BookActivity.this, ComicData.zuixinComicList);
		
		tuijianView.setAdapter(tuijianAdapter);
		paihangView.setAdapter(paihangAdapter);
		zuixinView.setAdapter(zuixinAdapter);
		
		tuijianView.setOnItemClickListener(new MyGridViewOnItemClickListener(BookActivity.this));
		paihangView.setOnItemClickListener(new ListViewOnItemClickListener(BookActivity.this, ComicData.paihangComicList));
		zuixinView.setOnItemClickListener(new ListViewOnItemClickListener(BookActivity.this, ComicData.zuixinComicList));
		
	}

	class MyOnClickListener implements OnClickListener {
		private int index = 0;

		public MyOnClickListener(int i) {
			index = i;
		}

		public void onClick(View v) {
			viewPager.setCurrentItem(index);
			TextUtil.changeTextColor(index, textList);
		}
	}

	
	
	//girdview的监听器
	class MyGridViewOnItemClickListener implements OnItemClickListener{
		
		private Context context;
		
		public MyGridViewOnItemClickListener(Context context){
			this.context = context;
		}

		@Override
		public void onItemClick(AdapterView<?> adapter, View view, int position,
				long arg3) {
			
			ComicDetail comicDetail = ComicData.tuijianComicList.get(position);
			Intent intent = new Intent(context,ComicDetailActivity.class);
			intent.putExtra("contentCode", comicDetail.getContentCode());
			context.startActivity(intent);
		}
		
	}
	//listView的监听器
	class ListViewOnItemClickListener implements OnItemClickListener{
		
		private Context context;
		private List<ComicDetail> comicList;
		
		public ListViewOnItemClickListener(Context context,List<ComicDetail>comicList){
			this.context = context;
			this.comicList = comicList;
		}

		@Override
		public void onItemClick(AdapterView<?> arg0, View arg1, int position,
				long arg3) {
			ComicDetail comicDetail = comicList.get(position);
			Intent intent = new Intent(context,ComicDetailActivity.class);
			intent.putExtra("contentCode", comicDetail.getContentCode());
			context.startActivity(intent);
		}
		
	}
	
	//View的点击事件
	class ViewOnClickListener implements OnClickListener {
		
		private int index;
		private Context context;
		
		public ViewOnClickListener(Context context,int index){
			this.index = index;
			this.context = context;
		}

		@Override
		public void onClick(View v) {
			ComicDetail comicDetail = ComicData.zhanshiComicList.get(index);
			Intent intent = new Intent(context,ComicDetailActivity.class);
			intent.putExtra("contentCode", comicDetail.getContentCode());
			context.startActivity(intent);
		}
		
	}
	

}


viewpager的页面切换监听:

package com.enterise.comic.manyu.listener;

import java.util.List;

import com.enterise.comic.manyu.utils.TextUtil;

import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.animation.Animation;
import android.view.animation.TranslateAnimation;
import android.widget.ImageView;
import android.widget.TextView;
/**
 * 监听标题导航转换
 * @author Always
 *
 */
public class MyOnPageChangeListener implements OnPageChangeListener{
	
	private int offset;
	private int bmpW;
	private int currIndex;
	private int one;
	private int two;
	private ImageView imageView;
	private List<TextView> textList;
	
	
	public MyOnPageChangeListener(int offset,int bmpW,int currIndex,ImageView imageView,List<TextView> textList){
		this.offset = offset;
		this.bmpW = bmpW;
		this.currIndex = currIndex;
		this.imageView = imageView;
		this.textList = textList;
		
		one = offset * 2 + bmpW;// 页卡1 -> 页卡2 偏移量
		two = one * 2;// 页卡1 -> 页卡3 偏移量
	}
	
	public MyOnPageChangeListener(int offset,int bmpW,int currIndex,ImageView imageView,boolean isMeActivity,List<TextView> textList){
		this.offset = offset;
		this.bmpW = bmpW;
		this.currIndex = currIndex;
		this.imageView = imageView;
		this.textList = textList;
		
		one = offset;// 页卡1 -> 页卡2 偏移量
		two = one * 2;// 页卡1 -> 页卡3 偏移量
	}
	
	
	public void onPageScrollStateChanged(int arg0) {
		
		
	}

	public void onPageScrolled(int arg0, float arg1, int arg2) {
		
	}

	public void onPageSelected(int arg0) {
		/*两种方法,这个是一种,下面还有一种,显然这个比较麻烦
		Animation animation = null;
		switch (arg0) {
		case 0:
			if (currIndex == 1) {
				animation = new TranslateAnimation(one, 0, 0, 0);
			} else if (currIndex == 2) {
				animation = new TranslateAnimation(two, 0, 0, 0);
			}
			break;
		case 1:
			if (currIndex == 0) {
				animation = new TranslateAnimation(offset, one, 0, 0);
			} else if (currIndex == 2) {
				animation = new TranslateAnimation(two, one, 0, 0);
			}
			break;
		case 2:
			if (currIndex == 0) {
				animation = new TranslateAnimation(offset, two, 0, 0);
			} else if (currIndex == 1) {
				animation = new TranslateAnimation(one, two, 0, 0);
			}
			break;
			
		}
		*/
		
		//字体颜色的变化
		if(textList != null){
			TextUtil.changeTextColor(arg0, textList);
		}
		Animation animation = new TranslateAnimation(one*currIndex, one*arg0, 0, 0);//显然这个比较简洁,只有一行代码。
		currIndex = arg0;
		animation.setFillAfter(true);// True:图片停在动画结束位置
		animation.setDuration(300);
		imageView.startAnimation(animation);
	}
	

}


出现的问题是:

scrollview和listview、gridview冲突

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值