`

带指示点Viewpaper图片轮播

阅读更多

功能:带指示点Viewpaper图片轮播(无限轮播)

效果图:

 

 

主要实现代码:
 

package com.eyeandroid.viewpager;
 
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
 
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
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.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.ImageView;
import android.widget.Toast;
 
public class MainActivity extends Activity {
    private ImageView[] imageViews = null;//用于显示指示点
    private ImageView imageView = null;
    private ViewPager advPager = null;
    //AtomicInteger,一个提供原子操作的Integer的类。
    //在Java语言中,++i和i++操作并不是线程安全的,
    //在使用的时候,不可避免的会用到synchronized关键字。而AtomicInteger则通过一种线程安全的加减操作接口。
    private AtomicInteger what = new AtomicInteger(0);
    private boolean isContinue = true;//判断是否轮播
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        initViewPager();
    }
 
 
    private void initViewPager() {
        advPager = (ViewPager) findViewById(R.id.adv_pager);
        ViewGroup group = (ViewGroup) findViewById(R.id.viewGroup);
        //用于存放轮播的图片
        List<View> advPics = new ArrayList<View>();
        
        ImageView img1 = new ImageView(this);
        img1.setBackgroundResource(R.drawable.pic1);
        advPics.add(img1);
 
        ImageView img2 = new ImageView(this);
        img2.setBackgroundResource(R.drawable.pic2);
        advPics.add(img2);
 
        ImageView img3 = new ImageView(this);
        img3.setBackgroundResource(R.drawable.pic3);
        advPics.add(img3);
 
        ImageView img4 = new ImageView(this);
        img4.setBackgroundResource(R.drawable.pic4);
        advPics.add(img4);
         
        imageViews = new ImageView[advPics.size()];
 
        for (int i = 0; i < advPics.size(); i++) {
            imageView = new ImageView(this);
            imageView.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
            imageViews[i] = imageView;
            if (i == 0) {
                imageViews[i].setBackgroundResource(R.drawable.advertising_point_h);
            } else {
                imageViews[i].setBackgroundResource(R.drawable.advertising_point);
            }
            group.addView(imageViews[i]);
        }
 
        advPager.setAdapter(new AdvAdapter(advPics));
        advPager.setOnPageChangeListener(new GuidePageChangeListener());
        advPager.setOnTouchListener(new OnTouchListener() {
             
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                case MotionEvent.ACTION_MOVE:
                    isContinue = false;
                    break;
                case MotionEvent.ACTION_UP:
                    isContinue = true;
                    break;
                default:
                    isContinue = true;
                    break;
                }
                return false;
            }
        });
         
        new Thread(new Runnable() {
            @Override
            public void run() {
                while (true) {
                    if (isContinue) {
                        viewHandler.sendEmptyMessage(what.get());
                        whatOption();
                    }
                }
            }
        }).start();
    }
 
    private void whatOption() {
        //获取当前的值,并自增
        what.incrementAndGet(); 
        if (what.get() > imageViews.length - 1) {
            //获取当前的值,并减少
            what.getAndAdd(-imageViews.length);
        }
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
             
        }
    }
 
    private final Handler viewHandler = new Handler() {
 
        @Override
        public void handleMessage(Message msg) {
            advPager.setCurrentItem(msg.what);
            super.handleMessage(msg);
        }
 
    };
 
    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) {
            what.getAndSet(arg0);
            for (int i = 0; i < imageViews.length; i++) {
                imageViews[arg0]
                        .setBackgroundResource(R.drawable.advertising_point_h);
                if (arg0 != i) {
                    imageViews[i]
                            .setBackgroundResource(R.drawable.advertising_point);
                }
            }
 
        }
 
    }
 
    private final class AdvAdapter extends PagerAdapter {
        private List<View> views = null;
 
        public AdvAdapter(List<View> views) {
            this.views = views;
        }
 
        @Override
        public void destroyItem(View arg0, int arg1, Object arg2) {
            ((ViewPager) arg0).removeView(views.get(arg1));
        }
 
        @Override
        public void finishUpdate(View arg0) {
 
        }
 
        @Override
        public int getCount() {
            return views.size();
        }
 
        @Override
        public Object instantiateItem(View arg0, int arg1) {
            ((ViewPager) arg0).addView(views.get(arg1), 0);
            views.get(arg1).setOnClickListener(new View.OnClickListener() {
                 
                @Override
                public void onClick(View v) {
                    Toast.makeText(MainActivity.this,"选中了第"+advPager.getCurrentItem()+"张图片" , Toast.LENGTH_SHORT).show();
                     
                }
            });
            return views.get(arg1);
        }
 
        @Override
        public boolean isViewFromObject(View arg0, Object arg1) {
            return arg0 == arg1;
        }
 
        @Override
        public void restoreState(Parcelable arg0, ClassLoader arg1) {
 
        }
 
        @Override
        public Parcelable saveState() {
            return null;
        }
 
        @Override
        public void startUpdate(View arg0) {
 
        }
 
    }
 
}

 

<?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="wrap_content" >
 
        <android.support.v4.view.ViewPager
            android:id="@+id/adv_pager"
            android:layout_width="fill_parent"
            android:layout_height="160dp" >
        </android.support.v4.view.ViewPager>
         
        <LinearLayout
            android:id="@+id/viewGroup"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom"
            android:paddingBottom="2dp"
            android:gravity="center"
            android:orientation="horizontal" >
        </LinearLayout>
 
</FrameLayout>

 

  • 大小: 63.3 KB
2
2
分享到:
评论

相关推荐

    viewPager实现轮播图Demo

    在这个Demo中,我们会创建一个自定义的PagerAdapter,例如`CustomPagerAdapter`,并在其中添加我们的轮播图片或者其他内容。 伪无限循环的实现关键在于巧妙地处理ViewPager的当前位置。由于ViewPager默认情况下只能...

    android显示多item多图片的viewpager,选中项居中变大,非选中项模糊变小

    在Android开发中,`ViewPager`是一个非常常用的组件,主要用于展示可滑动的多个页面,它在许多场景下被用于实现类似轮播图或者导航栏的效果。在这个特定的案例中,我们要实现的功能是“显示多item多图片的`ViewPager...

    Android 广告banner无限手动自动轮播

    5. **高度自定义**:开发者可以自由定制Banner的外观和行为,如设置轮播速度、指示器样式、点击事件等,以满足特定的应用需求。 6. **内存管理优化**:考虑到性能和内存消耗,该控件可能采用了智能的图片加载策略,...

    解决ViewPager页面小于3时左滑会空白,献给有需要的朋友

    ViewPager是Android平台中一个常用的控件,用于展示可滑动的页面集合,常用于实现类似Tab切换或轮播图的效果。然而,在某些情况下,如果ViewPager中的页面数量少于3个,用户左滑时可能会遇到空白页的问题。这个问题...

    android广告播放幻灯片效果

    6. **自定义配置**:ViewPaper允许自定义轮播间隔时间、是否启用无限循环、是否显示指示器等参数,以满足不同场景的需求。 在压缩包中的`toys_fragment`可能是一个示例代码片段,它展示了如何在Fragment中集成...

    ViewPager广告自动播放

    在安卓开发中,ViewPager是一个非常重要的组件,常用于实现页面滑动效果,比如在应用启动时展示的欢迎页、应用内的广告轮播等。本教程将深入探讨如何使用ViewPager实现广告的自动播放功能,这对于提升用户体验和吸引...

    ViewPager 的多个使用场景的Demo 欢迎页 循环 tab内嵌套

    ViewPager是Android平台中一个强大的视图滑动组件,它允许用户在多个页面间进行左右滑动切换,常用于实现如启动页、轮播图、标签页等效果。在这个压缩包中,包含了一些关于ViewPager不同使用场景的示例代码,如欢迎...

    Android实现单页显示3个Item的ViewPager炫酷切换效果

    ViewPager 通常用于实现图片轮播、新闻列表、应用程序引导等效果。 二、ViewPager 的基本使用 使用 ViewPager 需要在 layout 文件中声明 ViewPager 组件,并在 Activity 中实例化它。例如: ```xml android:id=...

    view paper循环滚动

    标题“view paper循环滚动”指的是在Android开发中实现一种无限循环的ViewPaper效果,这种效果常见于轮播图、广告栏等场景,使得用户在浏览时可以无限制地向前或向后滑动内容,而无需到达尽头就停止。描述中的“纯正...

Global site tag (gtag.js) - Google Analytics