使用ViewPager实现左右循环滑动图片
生活随笔
收集整理的這篇文章主要介紹了
使用ViewPager实现左右循环滑动图片
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?android-support-v4.jar,這是谷歌官方 給我們提供的一個兼容低版本Android設備的軟件包,里面包囊了只有在Android3.0以上可以使用的api。而ViewPager就是其中之 一,利用它我們可以做很多事情,從最簡單的導航,到頁面切換菜單等等。
?ViewPager的功能就是可以使視圖滑動,就像Lanucher左右滑動那樣。
下面是大概樣圖:
這個是非常常見的應用 下面給出實現的代碼: 源代碼: <pre name="code" class="java">package com.example.demo; import android.annotation.TargetApi; import android.graphics.Color; import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager.OnPageChangeListener; import android.support.v7.app.ActionBarActivity; import android.view.View; import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; import android.widget.ImageView; import android.widget.LinearLayout; @TargetApi(Build.VERSION_CODES.HONEYCOMB) public class MainActivity extends ActionBarActivity {private ViewPager pager;private ImageView[] images;private ImageView[] dots;private ImageView imageView;private boolean isLoop = true; private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); pager.setCurrentItem(pager.getCurrentItem() + 1); } }; @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//載入圖片資源IDpager = (ViewPager) findViewById(R.id.adv_pager); ViewGroup group = (ViewGroup) findViewById(R.id.viewGroup);//這里存放的是四張廣告背景 images = new ImageView[4]; for (int i = 0; i < 4; i++) {ImageView img = new ImageView(this);switch (i) {case 0:img.setBackgroundColor(Color.GREEN); break;case 1:img.setBackgroundColor(Color.RED); break;case 2:img.setBackgroundColor(Color.YELLOW); break;case 3:img.setBackgroundColor(Color.CYAN); break;default:break;}images[i]=img; }//對dots進行填充 dots = new ImageView[images.length]; //小圖標 for (int i = 0; i < images.length; i++) { imageView = new ImageView(this);//LinearLayout.LayoutParams.WRAP_CONTENTLinearLayout.LayoutParams layout = new LinearLayout.LayoutParams(20,20);layout.setMargins(5, 5, 5, 5);imageView.setLayoutParams(layout);dots[i] = imageView; if (i == 0) { dots[i].setBackgroundResource(R.drawable.aaa); } else { dots[i].setBackgroundResource(R.drawable.bbb); } group.addView(dots[i]);//將點點加入到ViewGroup中}//設置Adapterpager.setAdapter(new AdvAdapter(images)); //設置監聽,主要是設置點點的背景pager.setOnPageChangeListener(new GuidePageChangeListener());/** * 2147483647 / 2 = 1073741820 - 1 * 設置ViewPager的當前項為一個比較大的數,以便一開始就可以左右循環滑動 */ int n = Integer.MAX_VALUE / 2 % dots.length; int itemPosition = Integer.MAX_VALUE / 2 - n; pager.setCurrentItem(itemPosition);// 自動切換頁面功能 new Thread(new Runnable() { @Override public void run() { while (true) { try {Thread.sleep(2000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();} //sendEmptyMessageDelayed中就是構建了一個Message,//然后把這個Message的what設置成sendEmptyMessage方法中的What參數即可。handler.sendEmptyMessage(0); } } }).start(); }private final class GuidePageChangeListener implements OnPageChangeListener { @Override public void onPageScrollStateChanged(int arg0) { } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { } @Override public void onPageSelected(int arg0) { int a = arg0 % dots.length;for (int i = 0; i < dots.length; i++) { if(a==i){dots[i].setBackgroundResource(R.drawable.aaa); }else {dots[i].setBackgroundResource(R.drawable.bbb); }}} } private final class AdvAdapter extends PagerAdapter { private ImageView[] views = null; public AdvAdapter(ImageView[] advPics) { this.views = advPics; } /** * 銷毀預加載以外的view對象, 會把需要銷毀的對象的索引位置傳進來,就是position, * 因為imageViews只有四條數據,而position將會取到很大的值, * 所以使用取余數的方法來獲取每一條數據項。 */@Override public void destroyItem(View arg0, int arg1, Object arg2) { ((ViewPager) arg0).removeView(views[arg1%dots.length]); } /*** 該方法將返回所包含的 Item總個數。為了實現一種循環滾動的效果,返回了基本整型的最大值,這樣就會創建很多的Item, * 其實這并非是真正的無限循環。 */@Override public int getCount() { return Integer.MAX_VALUE; } /** * 載入圖片進去*/@Override public Object instantiateItem(View arg0, int arg1) { ((ViewPager) arg0).addView(views[arg1%dots.length], 0); return views[arg1%dots.length]; } /** * 判斷出去的view是否等于進來的view 如果為true直接復用 */@Override public boolean isViewFromObject(View arg0, Object arg1) { return arg0 == arg1; } } }
布局文件: <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"tools:context="com.example.demo.MainActivity" ><RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" > <!-- ViewPager是一個控件 --> <android.support.v4.view.ViewPager android:id="@+id/adv_pager" android:layout_width="match_parent" android:layout_height="160dp" > </android.support.v4.view.ViewPager><LinearLayoutandroid:id="@+id/viewGroup"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_alignBottom="@+id/adv_pager"android:layout_alignParentLeft="true"android:gravity="right"android:orientation="horizontal" ></LinearLayout></RelativeLayout> </RelativeLayout>
?
這個是非常常見的應用 下面給出實現的代碼: 源代碼: <pre name="code" class="java">package com.example.demo; import android.annotation.TargetApi; import android.graphics.Color; import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager.OnPageChangeListener; import android.support.v7.app.ActionBarActivity; import android.view.View; import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; import android.widget.ImageView; import android.widget.LinearLayout; @TargetApi(Build.VERSION_CODES.HONEYCOMB) public class MainActivity extends ActionBarActivity {private ViewPager pager;private ImageView[] images;private ImageView[] dots;private ImageView imageView;private boolean isLoop = true; private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); pager.setCurrentItem(pager.getCurrentItem() + 1); } }; @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//載入圖片資源IDpager = (ViewPager) findViewById(R.id.adv_pager); ViewGroup group = (ViewGroup) findViewById(R.id.viewGroup);//這里存放的是四張廣告背景 images = new ImageView[4]; for (int i = 0; i < 4; i++) {ImageView img = new ImageView(this);switch (i) {case 0:img.setBackgroundColor(Color.GREEN); break;case 1:img.setBackgroundColor(Color.RED); break;case 2:img.setBackgroundColor(Color.YELLOW); break;case 3:img.setBackgroundColor(Color.CYAN); break;default:break;}images[i]=img; }//對dots進行填充 dots = new ImageView[images.length]; //小圖標 for (int i = 0; i < images.length; i++) { imageView = new ImageView(this);//LinearLayout.LayoutParams.WRAP_CONTENTLinearLayout.LayoutParams layout = new LinearLayout.LayoutParams(20,20);layout.setMargins(5, 5, 5, 5);imageView.setLayoutParams(layout);dots[i] = imageView; if (i == 0) { dots[i].setBackgroundResource(R.drawable.aaa); } else { dots[i].setBackgroundResource(R.drawable.bbb); } group.addView(dots[i]);//將點點加入到ViewGroup中}//設置Adapterpager.setAdapter(new AdvAdapter(images)); //設置監聽,主要是設置點點的背景pager.setOnPageChangeListener(new GuidePageChangeListener());/** * 2147483647 / 2 = 1073741820 - 1 * 設置ViewPager的當前項為一個比較大的數,以便一開始就可以左右循環滑動 */ int n = Integer.MAX_VALUE / 2 % dots.length; int itemPosition = Integer.MAX_VALUE / 2 - n; pager.setCurrentItem(itemPosition);// 自動切換頁面功能 new Thread(new Runnable() { @Override public void run() { while (true) { try {Thread.sleep(2000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();} //sendEmptyMessageDelayed中就是構建了一個Message,//然后把這個Message的what設置成sendEmptyMessage方法中的What參數即可。handler.sendEmptyMessage(0); } } }).start(); }private final class GuidePageChangeListener implements OnPageChangeListener { @Override public void onPageScrollStateChanged(int arg0) { } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { } @Override public void onPageSelected(int arg0) { int a = arg0 % dots.length;for (int i = 0; i < dots.length; i++) { if(a==i){dots[i].setBackgroundResource(R.drawable.aaa); }else {dots[i].setBackgroundResource(R.drawable.bbb); }}} } private final class AdvAdapter extends PagerAdapter { private ImageView[] views = null; public AdvAdapter(ImageView[] advPics) { this.views = advPics; } /** * 銷毀預加載以外的view對象, 會把需要銷毀的對象的索引位置傳進來,就是position, * 因為imageViews只有四條數據,而position將會取到很大的值, * 所以使用取余數的方法來獲取每一條數據項。 */@Override public void destroyItem(View arg0, int arg1, Object arg2) { ((ViewPager) arg0).removeView(views[arg1%dots.length]); } /*** 該方法將返回所包含的 Item總個數。為了實現一種循環滾動的效果,返回了基本整型的最大值,這樣就會創建很多的Item, * 其實這并非是真正的無限循環。 */@Override public int getCount() { return Integer.MAX_VALUE; } /** * 載入圖片進去*/@Override public Object instantiateItem(View arg0, int arg1) { ((ViewPager) arg0).addView(views[arg1%dots.length], 0); return views[arg1%dots.length]; } /** * 判斷出去的view是否等于進來的view 如果為true直接復用 */@Override public boolean isViewFromObject(View arg0, Object arg1) { return arg0 == arg1; } } }
布局文件: <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"tools:context="com.example.demo.MainActivity" ><RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" > <!-- ViewPager是一個控件 --> <android.support.v4.view.ViewPager android:id="@+id/adv_pager" android:layout_width="match_parent" android:layout_height="160dp" > </android.support.v4.view.ViewPager><LinearLayoutandroid:id="@+id/viewGroup"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_alignBottom="@+id/adv_pager"android:layout_alignParentLeft="true"android:gravity="right"android:orientation="horizontal" ></LinearLayout></RelativeLayout> </RelativeLayout>
?
總結
以上是生活随笔為你收集整理的使用ViewPager实现左右循环滑动图片的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android仿QQ5.0侧滑菜单Res
- 下一篇: GitHub控件之BadgeView(数