使用ViewPager实现高仿launcher拖动效果

原创 2012年03月23日 17:44:04

         前面一篇高仿launcher和墨迹左右拖动效果获得了很多朋友的好评,上一篇文章 主要是通过自定义ViewGroup实现的,有点麻烦。今天用ViewPager 这个类实现了同样的效果,这样代码更少,但是效果是一样的。ViewPager是实现左右两个屏幕平滑地切换的一个类,它是Google提供的。

       使用ViewPager首先需要引入android-support-v4.jar这个jar包。具体ViewPager的用法,这里不做介绍,自己从网上搜索吧!

       下面先看一下效果:

       


效果请自行体验和上一篇比较。下面上代码:

首先是layout下面的main.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <android.support.v4.view.ViewPager
        android:id="@+id/viewPager"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

        <LinearLayout
            android:id="@+id/viewGroup"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_marginBottom="30dp"
            android:gravity="center_horizontal"
            android:orientation="horizontal" >
        </LinearLayout>
    </RelativeLayout>

</FrameLayout>

接下来为每一个切换界面设置布局item1.xml

<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <ImageView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="@drawable/guide01" >
    </ImageView>

</LinearLayout>
其他的几个界面布局和这个一样 ,就是修改下背景图片,所以不再复述,

最后是核心代码:

import java.util.ArrayList;


import android.app.Activity;
import android.os.Bundle;
import android.os.Parcelable;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.view.Window;
import android.widget.ImageView;

public class MainActivity extends Activity {
	ViewPager viewPager;
	ArrayList<View> list;
	ViewGroup main, group;
	ImageView imageView;
	ImageView[] imageViews;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		this.requestWindowFeature(Window.FEATURE_NO_TITLE);
		LayoutInflater inflater = getLayoutInflater();
		list = new ArrayList<View>();
		list.add(inflater.inflate(R.layout.item1, null));
		list.add(inflater.inflate(R.layout.item2, null));
		list.add(inflater.inflate(R.layout.item3, null));
		list.add(inflater.inflate(R.layout.item4, null));
		list.add(inflater.inflate(R.layout.item5, null));

		imageViews = new ImageView[list.size()];
		ViewGroup main = (ViewGroup) inflater.inflate(R.layout.main, null);
		// group是R.layou.main中的负责包裹小圆点的LinearLayout.
		ViewGroup group = (ViewGroup) main.findViewById(R.id.viewGroup);

		viewPager = (ViewPager) main.findViewById(R.id.viewPager);

		for (int i = 0; i < list.size(); i++) {
			imageView = new ImageView(MainActivity.this);
			imageView.setLayoutParams(new LayoutParams(10,10));
			imageView.setPadding(10, 0, 10, 0);
			imageViews[i] = imageView;
			if (i == 0) {
				// 默认进入程序后第一张图片被选中;
				imageViews[i].setBackgroundResource(R.drawable.guide_dot_white);
			} else {
				imageViews[i].setBackgroundResource(R.drawable.guide_dot_black);
			}
			group.addView(imageView);
		}

		setContentView(main);

		viewPager.setAdapter(new MyAdapter());
		viewPager.setOnPageChangeListener(new MyListener());
	}

	class MyAdapter extends PagerAdapter {

		@Override
		public int getCount() {
			return list.size();
		}

		@Override
		public boolean isViewFromObject(View arg0, Object arg1) {
			return arg0 == arg1;
		}

		@Override
		public int getItemPosition(Object object) {
			// TODO Auto-generated method stub
			return super.getItemPosition(object);
		}

		@Override
		public void destroyItem(View arg0, int arg1, Object arg2) {
			// TODO Auto-generated method stub
			((ViewPager) arg0).removeView(list.get(arg1));
		}

		@Override
		public Object instantiateItem(View arg0, int arg1) {
			// TODO Auto-generated method stub
			((ViewPager) arg0).addView(list.get(arg1));
			return list.get(arg1);
		}

		@Override
		public void restoreState(Parcelable arg0, ClassLoader arg1) {
			// TODO Auto-generated method stub

		}

		@Override
		public Parcelable saveState() {
			// TODO Auto-generated method stub
			return null;
		}

		@Override
		public void startUpdate(View arg0) {
			// TODO Auto-generated method stub

		}

		@Override
		public void finishUpdate(View arg0) {
			// TODO Auto-generated method stub

		}
	}

	class MyListener 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) {
			for (int i = 0; i < imageViews.length; i++) {
				imageViews[arg0]
						.setBackgroundResource(R.drawable.guide_dot_white);
				if (arg0 != i) {
					imageViews[i]
							.setBackgroundResource(R.drawable.guide_dot_black);
				}
			}

		}

	}
}

最后在提醒一句,不要忘记加入android-support-v4.jar这个jar包。


fragment中加载高德地图出现滑动冲突解决。

1,截图高德地图滑动问题,网上搜了好多方法,最后测试了大家常用的一种,重写ViewPager。 public class MyViewPager extends ViewPager { ...

ViewPager与百度地图冲突的纯净解决方案

有这样一个需求场景,要用百度地图,且要放在Fragment中,百度地图左右拖动就会和ViewPager的滑动事件冲突,这类似两可拖动控件的冲突,网上的方法大致如下: 1、父View继承ViewPage...

高德地图在ScrollView中滑动过程中边缘黑框的解决方案

在开发过程中遇到编写一个页面时一个ScrollView中包含两个map,然后上下滑动时产生黑影。费了老大的精力终于在官方文档上看到这样一段话。 public class TextureMapVi...

ViewPager与DrawerLayout以及百度MapView之间滑动冲突的解决

在CSDN看大牛们写的博客,总是会对他们的才华钦佩得不行。今天我也要写下我的第一篇博客,一来走走大牛们走过的路,鞭策自己提高技术;二来记录下自己的思路;三来希望对遇到相同问题的朋友提供帮助。好了废话不...

ListView和ExpandableListView实现安卓购物车功能

使用ListView和ExpandableListView实现安卓购物车的功能。

一个酷炫实用的下拉刷新开源库

先上图:类似于水滴的下拉刷新效果       Demo下载:(其中项目根目录下的circlerefresh就是该类库)。下面说说如何使用circlerefresh实现下拉刷新功能。 一。搭建工程:...

Android-使用ViewPager实现高仿launcher拖动效果(转)

ViewPager是实现左右两个屏幕平滑地切换的一个类 使用ViewPager首先需要引入android-support-v4.jar这个jar包。具体ViewPager的用法 首先是...

使用ViewPager实现高仿Launcher的拖动效果

这是我第一篇技术方面的Blog,写Blog的主要目的是督促自己不断地学习新知识,对学过的知识整理归纳,以便于更好的消化吸收,同时也为了和别人做一些技术分享和交流,以共同提高。 看到一位Android...
  • easonit
  • easonit
  • 2012年04月03日 21:53
  • 563

使用ViewPager实现高仿launcher拖动效果

前面一篇高仿launcher和墨迹左右拖动效果获得了很多朋友的好评,上一篇文章 主要是通过自定义ViewGroup实现的,有点麻烦。今天用ViewPager 这个类实现了同样的效果,这样代码更少,但是...

Android开发之ViewPager实现多页面切换及动画效果(仿Android的Launcher效果)

http://www.cnblogs.com/JczmDeveloper/p/3792832.html Android开发中经常会有引导页或者切换页面等效果,本文采用ViewPage...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用ViewPager实现高仿launcher拖动效果
举报原因:
原因补充:

(最多只允许输入30个字)