三 无限轮播 有原点

本文介绍了一种基于Android平台的轮播图实现方法,通过使用ViewPager进行图片展示,并结合Handler实现图片自动轮播效果。文章详细讲解了如何加载外部图片资源、设置图片切换动画以及实现底部指示点等功能。
/////////////////////////////////////////////布局              //两个布局  复制
<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="200dp">
   <android.support.v4.view.ViewPager
       android:id="@+id/vp"
       android:layout_width="wrap_content"
       android:layout_height="200dp"></android.support.v4.view.ViewPager>
   <LinearLayout
       android:id="@+id/sll"
       android:gravity="center"
       android:layout_alignParentBottom="true"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:orientation="horizontal">
</LinearLayout>
</RelativeLayout>


///////////////////////////////////////////////代码   
package com.example.wuxianlunbo;
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.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;

import com.google.gson.Gson;
import com.nostra13.universalimageloader.core.ImageLoader;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {
    String path="http://www.meirixue.com/api.php?c=index&a=index";
    private ViewPager vp;
    private List<User.DataBean.AdlistBean> adlist;
    private Madapter madapter;
    private ArrayList<ImageView> ivlist;
    private ImageView iv;
    private LinearLayout sll;

    //主线程
    Handler handler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
          int what=msg.what;
            switch (what){
                case 0:
                    Object obj = msg.obj;//取出值
                    String s = obj.toString();
                    Gson gson = new Gson();
                    User user = gson.fromJson(s, User.class);
                    adlist = user.getData().getAdlist();
                    //添加适配器
                    madapter = new Madapter();
                    vp.setAdapter(madapter);
                    initdote();//点点点/////////////////////////////////////
                    //设置延时
                    vp.setCurrentItem(1000);
                    handler.sendEmptyMessageDelayed(1,2000);
                    ViewPagerLister();//根据图片动选中的也跟着动
                    break;
                case 1:
                    int currentItem = vp.getCurrentItem();
                    currentItem++;
                    vp.setCurrentItem(currentItem);
                    handler.sendEmptyMessageDelayed(1,2000);//延时
                    break;
            }
        }
         //    viewpager的滑动监听事件
        private void ViewPagerLister() {
            vp.addOnPageChangeListener(new ViewPager.OnPageChangeListener(){
                @Override
                public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

                }
                @Override
                public void onPageSelected(int position) {
                        for(int x=0;x<ivlist.size();x++){
                            if (position%adlist.size()==x){
                                //证明点和图片是对应的,应该点是变红的
                                ivlist.get(position%adlist.size()).setImageResource(R.drawable.dot_focuable);
                            }else{
                                ivlist.get(x).setImageResource(R.drawable.dot_normal);
                            }
                        }
                }

                @Override
                public void onPageScrollStateChanged(int state) {

                }
            });
        }
    };



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        vp =(ViewPager)findViewById(R.id.vp);
        sll = (LinearLayout)findViewById(R.id.sll);
        init();//添加数据
    }

    //初始化点
    private void initdote() {
        ivlist = new ArrayList<>();
         if (ivlist!=null){
             ivlist.clear();
         }
        for (int i= 0; i <adlist.size() ; i++) {
            iv = new ImageView(MainActivity.this);
            if (i==0){
                //第一张,让其圆点进行选中状态
                iv.setImageResource(R.drawable.dot_focuable);
            }else{
                //其它的都不选中
                iv.setImageResource(R.drawable.dot_normal);
            }
            LinearLayout.LayoutParams parmas = new LinearLayout.LayoutParams(20, 20);
            //设置两个点之间的距离
            parmas.setMargins(10,0,10,0);
            sll.addView(iv,parmas);
            ivlist.add(iv);
        }
    }

    private void init() {
        //子线程
        new Thread(){
            @Override
            public void run() {
                try {
                    URL url = new URL(path);
                    HttpURLConnection urlConnection = (HttpURLConnection)url.openConnection();
                    int responseCode = urlConnection.getResponseCode();
                    if (responseCode==200){
                        InputStream inputStream = urlConnection.getInputStream();
                        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
                        StringBuilder builder = new StringBuilder();
                        String string="";
                        while ((string=bufferedReader.readLine())!=null){
                            builder.append(string);
                        }
                        String s = builder.toString();
                        //创建
                        Message me = new Message();
                        me.obj=s;
                        me.what=0;
                        handler.sendMessage(me);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }.start();
    }


    //ViewPager的适配器
    class Madapter extends 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) {
            ImageView img = new ImageView(MainActivity.this);
            img.setScaleType(ImageView.ScaleType.FIT_XY);//缩放
            ImageLoader.getInstance().displayImage(adlist.get(position%adlist.size()).getImg(),img);
            container.addView(img);
            return img;
        }

        @Override//销毁
        public void destroyItem(ViewGroup container, int position, Object object) {
            container.removeView((View)object);
        }
    }
}

源码地址: https://pan.quark.cn/s/d1f41682e390 miyoubiAuto 米游社每日米游币自动化Python脚本(务必使用Python3) 8更新:更换cookie的获取地址 注意:禁止在B站、贴吧、或各大论坛大肆传播! 作者已退游,项目不维护了。 如果有能力的可以pr修复。 小引一波 推荐关注几个非常可爱有趣的女孩! 欢迎B站搜索: @嘉然今天吃什么 @向晚大魔王 @乃琳Queen @贝拉kira 第方库 食用方法 下载源码 在Global.py中设置米游社Cookie 运行myb.py 本地第一次运行时会自动生产一个文件储存cookie,请勿删除 当前仅支持单个账号! 获取Cookie方法 浏览器无痕模式打开 http://user.mihoyo.com/ ,登录账号 按,打开,找到并点击 按刷新页面,按下图复制 Cookie: How to get mys cookie 当触发时,可尝试按关闭,然后再次刷新页面,最后复制 Cookie。 也可以使用另一种方法: 复制代码 浏览器无痕模式打开 http://user.mihoyo.com/ ,登录账号 按,打开,找到并点击 控制台粘贴代码并运行,获得类似的输出信息 部分即为所需复制的 Cookie,点击确定复制 部署方法--腾讯云函数版(推荐! ) 下载项目源码和压缩包 进入项目文件夹打开命令行执行以下命令 xxxxxxx为通过上面方式或取得米游社cookie 一定要用双引号包裹!! 例如: png 复制返回内容(包括括号) 例如: QQ截图20210505031552.png 登录腾讯云函数官网 选择函数服务-新建-自定义创建 函数名称随意-地区随意-运行环境Python3....
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值