使用ViewPager實(shí)現(xiàn)左右循環(huán)滑動(dòng)及滑動(dòng)跳轉(zhuǎn)
更新時(shí)間:2013年01月02日 17:12:35 作者:
今天實(shí)現(xiàn)了左右滑動(dòng),至于在最后一頁(yè)滑動(dòng)跳轉(zhuǎn),這個(gè)也做了但是效果不是太好,也希望有實(shí)現(xiàn)的朋友能夠分享下
前面一篇文章實(shí)現(xiàn)了使用ViewPager實(shí)現(xiàn)高仿launcher拖動(dòng)效果 ,后來(lái)很多朋友問(wèn)能不能實(shí)現(xiàn)左右循環(huán)滑動(dòng)效果和引導(dǎo)頁(yè)面。今天實(shí)現(xiàn)了左右滑動(dòng),至于在最后一頁(yè)滑動(dòng)跳轉(zhuǎn),這個(gè)也做了但是效果不是太好,也希望有實(shí)現(xiàn)的朋友能夠分享下。在最后一頁(yè)添加一張圖片單擊跳轉(zhuǎn),這個(gè)認(rèn)為很簡(jiǎn)單大家自己添加個(gè)圖片,點(diǎn)擊后跳轉(zhuǎn)就OK。
這篇是在實(shí)現(xiàn)了使用ViewPager實(shí)現(xiàn)高仿launcher拖動(dòng)效果的基礎(chǔ)上做了一些小的修改,可以參照前面的。廢話不多說(shuō)了,直接上代碼吧!
首先看一些layout下的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>
和前面一頁(yè)使用viewpager。使用ViewPager首先需要引入android-support-v4.jar這個(gè)jar包。自己不要忘記加。
下面是核心代碼:
package cn.com.karl.viewpager;
import java.util.ArrayList;
import android.app.Activity;
import android.content.Intent;
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.util.Log;
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;
private static int c_id = 0;
@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);
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(12,12));
//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());
viewPager.setCurrentItem(300);
}
class MyAdapter extends PagerAdapter {
@Override
public int getCount() {
return Integer.MAX_VALUE;
}
@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
try{
((ViewPager) arg0).addView(list.get(arg1%list.size()),0);
}catch (Exception e) {
// TODO: handle exception
}
return list.get(arg1%list.size());
}
@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 {
//當(dāng)滑動(dòng)狀態(tài)改變時(shí)調(diào)用
@Override
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub
//arg0=arg0%list.size();
}
//當(dāng)當(dāng)前頁(yè)面被滑動(dòng)時(shí)調(diào)用
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub
}
//當(dāng)新的頁(yè)面被選中時(shí)調(diào)用
@Override
public void onPageSelected(int arg0) {
if(arg0>2){
arg0=arg0%list.size();
}
c_id = 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);
}
}
Log.e("-------------", "當(dāng)前是第"+c_id+"頁(yè)");
}
}
}
代碼跟上一篇差不多,大家自己研究吧!下面看下效果:
忘記了,這種效果不太好用圖片演示,大家自己演示吧!滑動(dòng)到最后一張,再滑動(dòng)就是進(jìn)入了第一頁(yè)。下面看下我logcat下的打?。?

這里默認(rèn)是從第0頁(yè)開始的。
這篇是在實(shí)現(xiàn)了使用ViewPager實(shí)現(xiàn)高仿launcher拖動(dòng)效果的基礎(chǔ)上做了一些小的修改,可以參照前面的。廢話不多說(shuō)了,直接上代碼吧!
首先看一些layout下的xml
復(fù)制代碼 代碼如下:
<?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>
和前面一頁(yè)使用viewpager。使用ViewPager首先需要引入android-support-v4.jar這個(gè)jar包。自己不要忘記加。
下面是核心代碼:
復(fù)制代碼 代碼如下:
package cn.com.karl.viewpager;
import java.util.ArrayList;
import android.app.Activity;
import android.content.Intent;
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.util.Log;
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;
private static int c_id = 0;
@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);
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(12,12));
//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());
viewPager.setCurrentItem(300);
}
class MyAdapter extends PagerAdapter {
@Override
public int getCount() {
return Integer.MAX_VALUE;
}
@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
try{
((ViewPager) arg0).addView(list.get(arg1%list.size()),0);
}catch (Exception e) {
// TODO: handle exception
}
return list.get(arg1%list.size());
}
@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 {
//當(dāng)滑動(dòng)狀態(tài)改變時(shí)調(diào)用
@Override
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub
//arg0=arg0%list.size();
}
//當(dāng)當(dāng)前頁(yè)面被滑動(dòng)時(shí)調(diào)用
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub
}
//當(dāng)新的頁(yè)面被選中時(shí)調(diào)用
@Override
public void onPageSelected(int arg0) {
if(arg0>2){
arg0=arg0%list.size();
}
c_id = 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);
}
}
Log.e("-------------", "當(dāng)前是第"+c_id+"頁(yè)");
}
}
}
代碼跟上一篇差不多,大家自己研究吧!下面看下效果:

忘記了,這種效果不太好用圖片演示,大家自己演示吧!滑動(dòng)到最后一張,再滑動(dòng)就是進(jìn)入了第一頁(yè)。下面看下我logcat下的打?。?

這里默認(rèn)是從第0頁(yè)開始的。
您可能感興趣的文章:
- Android App中ViewPager所帶來(lái)的滑動(dòng)沖突問(wèn)題解決方法
- 自定義RadioButton和ViewPager實(shí)現(xiàn)TabHost帶滑動(dòng)的頁(yè)卡效果
- Android App中使用ViewPager+Fragment實(shí)現(xiàn)滑動(dòng)切換效果
- Android利用ViewPager實(shí)現(xiàn)滑動(dòng)廣告板實(shí)例源碼
- Android中ViewPager帶來(lái)的滑動(dòng)卡頓問(wèn)題解決要點(diǎn)解析
- Android開發(fā)之使用ViewPager實(shí)現(xiàn)圖片左右滑動(dòng)切換效果
- Android ViewPager無(wú)限循環(huán)實(shí)現(xiàn)底部小圓點(diǎn)動(dòng)態(tài)滑動(dòng)
- Android實(shí)現(xiàn)橫向滑動(dòng)卡片效果
- Android仿探探卡片式滑動(dòng)效果實(shí)現(xiàn)
- ViewPager+RadioGroup實(shí)現(xiàn)左右滑動(dòng)卡片布局
相關(guān)文章
Android使用TabLayout+Fragment實(shí)現(xiàn)頂部選項(xiàng)卡
本文通過(guò)實(shí)例代碼給大家介紹了Android使用TabLayout+Fragment實(shí)現(xiàn)頂部選項(xiàng)卡功能,包括TabLyout的使用,感興趣的朋友參考下本文吧2017-05-05Android實(shí)現(xiàn)帶頁(yè)面切換的鎖屏功能
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)帶頁(yè)面切換的鎖屏功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-06-06微信小程序 canvas開發(fā)實(shí)例及注意事項(xiàng)
這篇文章主要介紹了微信小程序 wxcanvas開發(fā)實(shí)例及注意事項(xiàng)的相關(guān)資料,這里對(duì)微信canvas與H5中的canvas做對(duì)比,并說(shuō)明注意事項(xiàng),需要的朋友可以參考下2016-12-12Android 中使用RecyclerView實(shí)現(xiàn)底部翻頁(yè)
這篇文章主要介紹了Android 中使用RecyclerView實(shí)現(xiàn)底部翻頁(yè)功能,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-11-11Retrofit網(wǎng)絡(luò)請(qǐng)求和響應(yīng)處理重點(diǎn)分析講解
這篇文章主要介紹了Retrofit網(wǎng)絡(luò)請(qǐng)求和響應(yīng)處理重點(diǎn)分析,在使用?Retrofit發(fā)起網(wǎng)絡(luò)請(qǐng)求時(shí),我們可以通過(guò)定義一個(gè)接口并使用Retrofit的注解來(lái)描述這個(gè)接口中的請(qǐng)求,Retrofit會(huì)自動(dòng)生成一個(gè)實(shí)現(xiàn)該接口的代理對(duì)象2023-03-03使用Android的OkHttp包實(shí)現(xiàn)基于HTTP協(xié)議的文件上傳下載
OkHttp(GitHub主頁(yè)https://github.com/square/okhttp)是近來(lái)人氣攀升的一款安卓第三方HTTP包,這里我們來(lái)講解一下如何使用Android的OkHttp包實(shí)現(xiàn)基于HTTP協(xié)議的文件上傳下載:2016-07-07