100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 使用ViewPager实现左右循环滑动图片

使用ViewPager实现左右循环滑动图片

时间:2022-07-28 21:09:15

相关推荐

使用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="/apk/res/android"xmlns:tools="/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>

?

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。