viewpager无限轮播

主activity代码

package com.example.viewpager;

import java.util.ArrayList;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;
import android.widget.RadioButton;
import android.widget.RadioGroup;

import com.baway.GetList.GetList;
import com.baway.bean.Image;
import com.baway.http.GetJson;
import com.example.adapter.VpAdapter;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;

public class MainActivity extends Activity {

private String url = "http://i.dxy.cn/snsapi/event/count/list/all";
private ViewPager vp;
ArrayList<ImageView> list;
private ArrayList<Image> imagelist;

Handler handler = new Handler() {
    public void handleMessage(android.os.Message msg) {
        // 获取当前位置
        vp.setCurrentItem(vp.getCurrentItem() + 1);
        // 设置页面跳转时间间隔
        handler.sendEmptyMessageDelayed(0, 2000);
    };
};
private GetJson gj;
private GetList gl;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    // 设置页面跳转时间间隔(首次运行)
    handler.sendEmptyMessageDelayed(0, 2000);
    gj = new GetJson();
    gl = new GetList();
    vp = (ViewPager) findViewById(R.id.vp);

    new Mythread().start();

}

private void getimage() {
    list = new ArrayList<ImageView>();
    for (int i = 0; i < imagelist.size(); i++) {
        ImageView iv = new ImageView(getApplicationContext());

        // 图像拉伸
        iv.setScaleType(ScaleType.FIT_XY);

        // 配置imageloadler加载图片
        ImageLoader loader = ImageLoader.getInstance();
        loader.init(ImageLoaderConfiguration
                .createDefault(getApplicationContext()));

        loader.displayImage(imagelist.get(i).getPath(), iv);
        list.add(iv);

        //imageview监听
         iv.setOnTouchListener(new OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if(event.getAction()==MotionEvent.ACTION_DOWN){
                    //按下状态停止播放
                    handler.removeCallbacksAndMessages(null);
                }else if(event.getAction()==MotionEvent.ACTION_CANCEL){
                    //取消时,发送消息
                    handler.sendEmptyMessageDelayed(0, 2000);
                }else if(event.getAction()==MotionEvent.ACTION_UP){
                    //抬起时,发送消息
                    handler.sendEmptyMessageDelayed(0, 2000);
                }
                return true;
            }
        });
    }


}

class Mythread extends Thread {

    private RadioGroup rg;

    @Override
    public void run() {
        // TODO Auto-generated method stub
        super.run();
        String imagejson = gj.getjson(url);
        Log.d("-----------------------------", imagejson);
        imagelist = gl.getimagelist(imagejson);
        Log.d("-----------------------------", imagelist.size() + "");
        runOnUiThread(new Runnable() {
            public void run() {
                //添加小圆点
                setdian();
                // 为imageview适配图片
                getimage();

                // adapter适配数据
                vp.setAdapter(new VpAdapter(list));
                //vp 滑动监听
                vp.setOnPageChangeListener(new OnPageChangeListener() {

                    @Override
                    public void onPageSelected(int arg0) {
                        rg.check(arg0%imagelist.size());
                    }

                    @Override
                    public void onPageScrolled(int arg0, float arg1, int arg2) {
                        // TODO Auto-generated method stub

                    }

                    @Override
                    public void onPageScrollStateChanged(int arg0) {
                        // TODO Auto-generated method stub

                    }
                });
            }
        });
    }

    protected void setdian() {
        //添加边距
        int wrap = RadioGroup.LayoutParams.WRAP_CONTENT;
        RadioGroup.LayoutParams params = new RadioGroup.LayoutParams(wrap, wrap);
        params.leftMargin = 5;

        rg = (RadioGroup) findViewById(R.id.rg);
        for (int i = 0; i < imagelist.size(); i++) {
            RadioButton rb = new RadioButton(getApplicationContext());
            rb.setId(i);
            // 设置button属性
            rb.setButtonDrawable(R.drawable.select_button);
            // 如果是第一个时,不需要加左边距
            if (i != 0) {
                rg.addView(rb, params);
            } else
                rg.addView(rb);
        }
        rg.check(0);

    }
}

}

适配器代码

package com.example.adapter;

import java.util.ArrayList;

import android.R.integer;
import android.support.v4.view.PagerAdapter;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;

public class VpAdapter extends PagerAdapter {

private ArrayList<ImageView> list;

public VpAdapter(ArrayList<ImageView> list) {
    super();
    this.list = list;
}

@Override
public int getCount() {
    // TODO Auto-generated method stub
    return Integer.MAX_VALUE;
}

@Override
public boolean isViewFromObject(View arg0, Object arg1) {
    // TODO Auto-generated method stub
    return arg0==arg1;
}

@Override
public void destroyItem(ViewGroup container, int position, Object object) {

    container.removeView((View) object);
}

@Override
public Object instantiateItem(ViewGroup container, int position) {

    ImageView iv=list.get(position%list.size());
    container.addView(iv);
    return iv;
}

}

XML文件

button1

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"

    android:shape="oval" >
      <!-- 画圆点 -->
      <stroke 
          android:width="1dp"
          android:color="#00f"
          />
      <solid 
          android:color="#0f0"
          />
    <size 
        android:height="10dp"
        android:width="10dp"
        />

</shape>

bitton2

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"

    android:shape="oval" >
      <!-- 画圆点 -->
      <stroke 
          android:width="1dp"
          android:color="#00f"
          />
      <solid 
          android:color="#fff"
          />
    <size 
        android:height="10dp"
        android:width="10dp"
        />

</shape>

select文件

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/button" android:state_checked="true"></item>
    <item android:drawable="@drawable/button1" android:state_checked="false"></item>

</selector>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【优质项目推荐】 1、项目代码均经过严格本地测试,运行OK,确保功能稳定后才上传平台。可放心下载并立即投入使用,若遇到任何使用问题,随时欢迎私信反馈与沟通,博主会第一时间回复。 2、项目适用于计算机相关专业(如计科、信息安全、数据科学、人工智能、通信、物联网、自动化、电子信息等)的在校学生、专业教师,或企业员工,小白入门等都适用。 3、该项目不仅具有很高的学习借鉴价值,对于初学者来说,也是入门进阶的绝佳选择;当然也可以直接用于 毕设、课设、期末大作业或项目初期立项演示等。 3、开放创新:如果您有一定基础,且热爱探索钻研,可以在此代码基础上二次开发,进行修改、扩展,创造出属于自己的独特应用。 欢迎下载使用优质资源!欢迎借鉴使用,并欢迎学习交流,共同探索编程的无穷魅力! 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值