Android viewpager无限轮播获取网络图片功能

本文实例为大家分享了viewpager无限轮播获取网络图片的具体代码,供大家参考,具体内容如下

话不多说直接上代码,你们都懂的

小圆点属性

dot_focused.xml

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

 <solid android:color="#f00"/>
 <corners android:radius="8dp"/>
</shape>

dot_normal.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
 <solid android:color="#88000000"/>
 <corners android:radius="8dp"/>
</shape> 

dot_layout.xml  

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:orientation="vertical" >

 <View
  android:id="@+id/scrollView"
  android:layout_width="8dp"
  android:layout_height="8dp"
  android:layout_margin="3dp"
  android:background="@drawable/dot_normal"
  />

</LinearLayout>

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 >
 <android.support.v4.view.ViewPager
  android:id="@+id/viewPager"
  android:layout_width="match_parent"
  android:layout_height="match_parent">
 </android.support.v4.view.ViewPager>
 <LinearLayout
  android:id="@+id/ll"
  android:layout_marginTop="450dp"
  android:orientation="horizontal"
  android:gravity="center"
  android:layout_width="match_parent"
  android:layout_height="20dp"/>

</RelativeLayout>

以上是布局

下面src代码

import android.content.Intent;
import android.os.AsyncTask;
import android.os.Handler;
import android.os.Message;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import com.bwie.bean.SuperClass;
import com.bwie.utils.NetWorkUtils;
import com.bwie.utils.URLDB;
import com.google.gson.Gson;
import com.nostra13.universalimageloader.core.ImageLoader;
import java.util.ArrayList;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;

public class MainActivity extends AppCompatActivity {

 private ViewPager viewPager;
 private Button bt;
 private LinearLayout layout;
 private List<SuperClass.ResultBean.DataBean> data;
 private NetWorkUtils netWorkUtils = new NetWorkUtils();//实例化工具类
 private List<ImageView>imgs = new ArrayList<ImageView>();//图片的集合
 private List<View> dots = new ArrayList<View>(); //小圆点集合
 private int i = 0;
 private int dot = 0;
 private Handler handler = new Handler(){
  @Override
  public void handleMessage(Message msg) {
   super.handleMessage(msg);

   viewPager.setCurrentItem(i);
   dots.get(dot).setBackgroundResource(R.drawable.dots_normal);
   dots.get(i%imgs.size()).setBackgroundResource(R.drawable.dots_focus);
   dot=i%imgs.size();
  }
 };
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);

  //异步网络请求
  new AsyncTask<String,Integer,String>(){

   @Override
   protected String doInBackground(String... params) {
    String json = netWorkUtils.getJsonHttpConnetion(URLDB.URL_IJ);
    return json;
   }
   @Override
   protected void onPostExecute(String s) {
    super.onPostExecute(s);
    SuperClass superClass = new Gson().fromJson(s, SuperClass.class);
    data = superClass.getResult().getData();
    init();//初始化方法
   }
  }.execute();
 }
 //初始化方法
 private void init() {
  viewPager = (ViewPager) findViewById(R.id.viewPager);
  layout = (LinearLayout) findViewById(R.id.ll);
  getImgs();//获取图片
  getDots();//获取小圆点
  //viewPager适配器
  viewPager.setAdapter(new PagerAdapter() {
   @Override
   public int getCount() {
    return Integer.MAX_VALUE;
   }

   @Override
   public boolean isViewFromObject(View view, Object object) {
    return view==object;
   }

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

    int i = position % imgs.size();
    ImageView imageView = imgs.get(i);
    imageView.setScaleType(ImageView.ScaleType.FIT_XY);
    container.addView(imageView);
    return imageView;
   }

   @Override
   public void destroyItem(ViewGroup container, int position, Object object) {
    container.removeView((View) object);
   }
  });
  //设置初始化位置
  i = imgs.size()*10;
  //得到位置
  viewPager.setCurrentItem(i);
  //设置第一个圆点为true
  dots.get(0).setBackgroundResource(R.drawable.dots_focus);
  //timer自动轮播
  Timer timer = new Timer();
  timer.schedule(new TimerTask() {
   @Override
   public void run() {
    i = viewPager.getCurrentItem() + 1;
    handler.sendEmptyMessage(i);
   }
  },1,2000);
 }

 //图片的方法
 private void getImgs() {

  for(int i = 0;i<data.size();i++){
   List<SuperClass.ResultBean.DataBean.StepsBean> steps = data.get(i).getSteps();
   String url = steps.get(0).getImg();
   ImageView img = new ImageView(this);
   img.setScaleType(ImageView.ScaleType.FIT_XY);
   ImageLoader.getInstance().displayImage(url,img);
   imgs.add(img);
  }
 }
 //小圆点的方法
 private void getDots() {

  for(int i=0;i<imgs.size();i++){
   View view = LayoutInflater.from(this).inflate(R.layout.dot_item,null);
   View viewById = view.findViewById(R.id.scrollView);
   dots.add(viewById);
   layout.addView(view);
  }
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 手把手教你用ViewPager自定义实现Banner轮播

    欢迎大家关注Android开源网络框架NoHttp:https://github.com/yanzhenjie/NoHttp 我们在实际开发中,很多App都会在做一个广告轮播器(可能是图片,可能是其他View),很多同学都是使用别人封装好的或者直接使用ViewPager自己来改,但是有人可能并不理解里面的原理,或者有人遇到了手势滑动冲突.我们今天就用150行代码实现一自定义的广告轮播器并不干扰原来View滑动事件. 本例代码源码及Demo传送门 效果演示 需求分析.解决方案 轮播器最重要的几个特

  • Android 使用ViewPager实现左右循环滑动及轮播效果

    ViewPager是一个常用的Android组件,不过通常我们使用ViewPager的时候不能实现左右无限循环滑动,在滑到边界的时候会看到一个不能翻页的动画,可能影响用户体验.此外,某些区域性的ViewPager(例如展示广告或者公告之类的ViewPager),可能需要自动轮播的效果,即用户在不用滑动的情况下就能够看到其他页面的信息. 循环滑动效果的实现:PagerAdapter 我们知道ViewPager自带的滑动效果非常出色,因此我们基本不需要处理这个滑动,只处理内容的显示.而内容的显示是由

  • Android实现基于ViewPager的无限循环自动播放带指示器的轮播图CarouselFigureView控件

    最近用到需要无限轮播自动播放的轮播轮播图,网上感觉都有这样那样的问题,于是自己写了一个通用的控件CarouselFigureView. 特点: 1.可以轮播view可以自己定义,不一定是要是ImageView2.指示器默认显示,但是可以隐藏3.可以设置指示器的颜色.间距.大小 4.有基础的可以自己修改代码改变指示器位置,这个应该不难5.可以自己开启和关闭自动轮播,开启轮播的时候可以设置轮播时间间隔,默认3000毫秒 我们先来看看效果图: 然后来看看使用代码 xml代码 <?xml version

  • Android 中使用 ViewPager实现屏幕页面切换和页面轮播效果

    之前关于如何实现屏幕页面切换,写过一篇博文<Android中使用ViewFlipper实现屏幕切换>,相比ViewFlipper,ViewPager更适用复杂的视图切换,而且Viewpager有自己的adapter,这也让其适应复杂对象,实现数据的动态加载. ViewPager是谷歌官方给我们提供的一个兼容低版本安卓设备的软件包,里面包囊了只有在安卓3.0以上可以使用的api.而viewpager就是其中之一,利用它,我们可以做很多事情,从最简单的导航,到页面菜单等等. 下面我们就展示下Vie

  • Android使用ViewPager实现自动轮播

    很多APP中都实现了类似引导页的自动轮播,不由得想到昨天的引导页上修改一下代码实现轮播. 其实大体上只需要添加一个线程循环执行就可以了. 项目已同步至:https://github.com/nanchen2251/viewpagerDemo 同样的先上图 直接上代码,注释都全的,我想这样更有利于理解. 先改了Adapter  package com.example.nanchen.taketurnplaydemo; import android.support.v4.view.PagerAdap

  • Android ViewPager实现图片轮播效果

    在app中图片的轮播显示可以说是非常常见的实现效果了,其实现原理不过是利用ViewPager,然后利用handler每隔一定的时间将ViewPager的currentItem设置为当前item的position+1即可.先来看看效果图吧: 就是实现这样的一个轮播广告的效果. 因为这个是自己为了练习仿照某旅游类App做的,所以这里的数据是使用抓包工具抓取的,准备数据等工作就不在这里赘述了,反正数据的添加大体都是相同的.我的思路是这样的,从网络上实时的获取数据(当然你也可以将数据写死),然后通过网络

  • Android ViewPager实现轮播图效果

    先上一张效果图: 说到ViewPager实现轮播图效果,那么肯定会用到PagerAdapter,下面先介绍下这个类. PagerAdapter简介 PagerAdapter是Android.support.v4包中的类,是一个抽象类,直接继承于Object,导入包android.support.v4.view.PagerAdapter即可使用. PagerAdapter主要是viewpager的适配器,而viewPager则也是在android.support.v4扩展包中新添加的一个强大的控件

  • Android中用RxJava和ViewPager实现轮播图

    前言 很多人要实现轮播图都会想到使用ViewPager + Handler来完成轮播图的效果.但是在RxJava快速发展的情况下,已经可以使用RxJava来代替Handler完成这样任务了. 下面我们就来介绍如何实现RxJava+ViewPager的轮播图. 效果图如下 ViewPager的操作 说到ViwePager应该大家都不陌生,它可以结合普通的View也可以结合Fragment一起使用.在此我也就不对它的使用方法进行过多的介绍了.直接开始介绍轮播的方法. 常见的轮播操作 private

  • Android使用ViewPager加载图片和轮播视频

    作为Android基础组件之一,大家对viewpager已经很熟悉了,网上也有很多使用viewpager来加载图片的案例.但是像微信那样点击图片,可以轮播显示图片和视频的例子却没找到.正巧项目中有需求,可以就花时间写了下,现在给一下核心代码,希望对有此需求的同学们起一个抛砖引玉的作用.话不多说了,上代码: 以下是initData的代码 public void initData() { //把聊天界面的图片和视频找出来,并加到数组中,并在 //并根据传进来的position来找到视频或图片在数组中

  • Android 使用ViewPager自动滚动循环轮播效果

    对Android 利用ViewPager实现图片可以左右循环滑动效果,感兴趣的朋友可以直接点击查看内容详情. 主要介绍如何实现ViewPager自动播放,循环滚动的效果及使用.顺便解决ViewPager嵌套(ViewPager inside ViewPager)影响触摸滑动及ViewPager滑动速度设置问题. 先给大家展示下效果图,喜欢的朋友可以下载源码: 1.实现 没有通过ScheduledExecutorService或Timer定期执行某个任务实现,而是简单的通过handler发送消息去

随机推荐