public class MainActivity extends AppCompatActivity {    private ViewPager view_pager;    private LinearLayout linearlayout;    private List imglist;    private Handler handler=new Handler(){        @Override        public void handleMessage(Message msg) {            if (msg.what==1){//判断消息的标志                //获取ViewPager当前显示到哪个位置                int item = view_pager.getCurrentItem();                //然后+1                item++;                //重新设置一个                view_pager.setCurrentItem(item);                //再次发送,,形成一个死循环,,,到这里图片的无线轮播已经完成,,下面是一些美化                handler.sendEmptyMessageDelayed(1,2000);            }        }    };    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //获取id        view_pager = (ViewPager) findViewById(R.id.View_Pager);        //获取小点的布局,,我这里用的是线性布局        linearlayout = (LinearLayout) findViewById(R.id.linearlayout);        //网络获取图片的方法        getDataFromNet();    }    private void getDataFromNet() {        //异步加载        new AsyncTask,Void,String>(){            @Override            protected String doInBackground(Void... params) {                //路径                String path="http://www.yulin520.com/a2a/impressApi/news/mergeList?pageSize=10&page=1";                try {                    URL url = new URL(path);                    HttpURLConnection connection= (HttpURLConnection) url.openConnection();                    //设置访问的类型                    connection.setRequestMethod("GET");                    //读取超时的时间                    connection.setReadTimeout(5000);                    //加载超时的时间                    connection.setConnectTimeout(5000);                    //获取到数据时返回一个状态码,,200为成功                    int code = connection.getResponseCode();                    if (code == 200){                        //获取到的数据将以流的形式                        InputStream inputStream = connection.getInputStream();                        //写一个方法将字节流转为字符流                        String json=streamToString(inputStream,"utf-8");                        //将转换成功后的数据反出去                        return json;                    }                } catch (Exception e) {                    e.printStackTrace();                }                return null;            }            @Override            protected void onPostExecute(String s) {//这个s就是上个方法所反出来的数据                //Gson解析....这里需要导json包..右击当前工程..选择open Moudle settings 》》》Dependencies>> + 号》》》Library Dendency>>找到Gson。。然后 ok 。。 ok                Gson gson = new Gson();                //得到一个对象                DataDataBean bean = gson.fromJson(s, DataDataBean.class);                //获取到集合                final List data = bean.getData();                //获取到适配器                MyAdapter adapter=new MyAdapter(MainActivity.this,data,handler);                //设置适配器                view_pager.setAdapter(adapter);                //根据集合的长度,,动态添加小点                initDoc(data);                //设置视图刚开始显示视图是从集合的哪个下标开始,,这样才能实现无线轮播,,如果不设置,,只能右无线滑动                view_pager.setCurrentItem(data.size()*10000);                //使用handle实现无线自动无线轮播                handler.sendEmptyMessageDelayed(1,2000);//参数一,是一个handle识别消息的标志,,参数二是换下一个图片之间的时间                //viewPager设置监听                view_pager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {                    @Override                    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {                    }                    @Override                    public void onPageSelected(int position) {                         //遍历装ImageView的集合                        for (int i=0;i<imglist.size();i++){                            if (i==position%data.size()){                                imglist.get(i).setImageResource(R.drawable.shape_01);                            }else{                                imglist.get(i).setImageResource(R.drawable.shape_02);                            }                        }                    }                    @Override                    public void onPageScrollStateChanged(int state) {                    }                });            }        }.execute();    }    private void initDoc(List data) {        //需要一个集合去记录小点的ImageView控件        imglist = new ArrayList();        //添加小点之前需要先清空        linearlayout.removeAllViews();        //fou循环添加小点        for (int i=0;i;i++){            //获取控件            ImageView view=new ImageView(MainActivity.this);            //用shape写两个颜色不一样的点,,设置开始显示第一张图片,点的颜色            if (i==0){                view.setImageResource(R.drawable.shape_01);            }else{                view.setImageResource(R.drawable.shape_02);            }            imglist.add(view);            LinearLayout.LayoutParams params=new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.WRAP_CONTENT);            params.setMargins(5,0,5,0);//四个参数:距离左边的距离,,距离上边的距离,,距离右边的距离,,距离下边的距离            linearlayout.addView(view,params);        }    }    //将字节流转为字符流的方法    private String streamToString(InputStream inputStream,String charset) {        try {            InputStreamReader inputStreamReader = new InputStreamReader(inputStream,charset);            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);            String s = null;            StringBuilder builder = new StringBuilder();            while ((s = bufferedReader.readLine()) != null){                builder.append(s);            }            bufferedReader.close();            return builder.toString();        } catch (Exception e) {            e.printStackTrace();        }        return  null;    }}
   
   
 //适配器
   
public class MyAdapter extends PagerAdapter {//继承PagerAdapter    Context context;//上下文    List list;//集合    Handler handler;    //有参方法    public MyAdapter(Context context, List list, Handler handler) {        this.context = context;        this.list = list;        this.handler=handler;    }    @Override    public int getCount() {//这里本是返回集合的大小..但是要实现无线轮播的效果,,需要改变集合的大小        return Integer.MAX_VALUE;    }    @Override    public boolean isViewFromObject(View view, Object object) {        return view==object;    }    //还需要重写另外两个方法,,,instantiateItem()这是显示视图的方法,,destroyItem()销毁视图的方法    @Override    public Object instantiateItem(ViewGroup container, int position) {        ImageView imageView=new ImageView(context);        //设置图片的平铺,,,占满控件的x,,y,轴        imageView.setScaleType(ImageView.ScaleType.FIT_XY);        //imageLoader加载图片到这个imageView控件上        ImageLoader.getInstance().displayImage(list.get(position%list.size()).getImg(),imageView,ImageLoaderUtlis.imageOptions());       //给图片设置监听,,,因为图片在自动轮播的时候,,如果不设置这些,,图片不会停止自动轮播        imageView.setOnTouchListener(new View.OnTouchListener() {            @Override            public boolean onTouch(View v, MotionEvent event) {                //获取手指的动作                int action = event.getAction();                //判断                switch (action){                    case MotionEvent.ACTION_DOWN://按下                        handler.removeCallbacksAndMessages(null);                        break;                    case MotionEvent.ACTION_MOVE://移动                        handler.removeCallbacksAndMessages(null);                        break;                    case MotionEvent.ACTION_CANCEL://取消                        handler.sendEmptyMessageDelayed(1,2000);                        break;                    case MotionEvent.ACTION_UP://抬起的动作                        handler.sendEmptyMessageDelayed(1,2000);                        break;                }                //true表示自己处理触摸事件                return true;            }        });        container.addView(imageView);        return imageView;    }    @Override    public void destroyItem(ViewGroup container, int position, Object object) {        container.removeView((View) object);//销毁视图    }}

   
 //需要在清单文件中注册
   
public class BaseApplcition extends Application{    @Override    public void onCreate() {        super.onCreate(); ImageLoaderUtlis.inint(this);    }}
//处理图片的一些代码
   
public class ImageLoaderUtlis {    public static void  inint(Context context){        File cacheDir = StorageUtils.getCacheDirectory(context);  //缓存文件夹路径        ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)                .threadPoolSize(3) // default  线程池内加载的数量                .threadPriority(Thread.NORM_PRIORITY - 2) // default 设置当前线程的优先级                .tasksProcessingOrder(QueueProcessingType.FIFO) // default                .denyCacheImageMultipleSizesInMemory()                .memoryCache(new LruMemoryCache(2 * 1024 * 1024)) //可以通过自己的内存缓存实现                .memoryCacheSize(2 * 1024 * 1024)  // 内存缓存的最大值                .memoryCacheSizePercentage(13) // default                .diskCache(new UnlimitedDiskCache(cacheDir)) // default 可以自定义缓存路径                .diskCacheSize(50 * 1024 * 1024) // 50 Mb sd卡(本地)缓存的最大值                .diskCacheFileCount(100)  // 可以缓存的文件数量                // default为使用HASHCODE对UIL进行加密命名, 还可以用MD5(new Md5FileNameGenerator())加密                .diskCacheFileNameGenerator(new HashCodeFileNameGenerator())                .imageDownloader(new BaseImageDownloader(context)) // default                .defaultDisplayImageOptions(DisplayImageOptions.createSimple()) // default                .writeDebugLogs() // 打印debug log                .build(); //开始构建        ImageLoader.getInstance().init(config);    }    public  static  DisplayImageOptions imageOptions(){        DisplayImageOptions options = new DisplayImageOptions.Builder()                .showImageOnLoading(R.mipmap.ic_launcher) // 设置图片下载期间显示的图片                .showImageForEmptyUri(R.mipmap.ic_launcher) // 设置图片Uri为空或是错误的时候显示的图片                .showImageOnFail(R.mipmap.ic_launcher) // 设置图片加载或解码过程中发生错误显示的图片                .resetViewBeforeLoading(true)  // default 设置图片在加载前是否重置、复位                .delayBeforeLoading(1000)  // 下载前的延迟时间                .cacheInMemory(true) // default  设置下载的图片是否缓存在内存中                .cacheOnDisk(true) // default  设置下载的图片是否缓存在SD卡中                .considerExifParams(true) // default                .imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2) // default 设置图片以如何的编码方式显示                .bitmapConfig(Bitmap.Config.RGB_565) // default 设置图片的解码类型                .displayer(new SimpleBitmapDisplayer()) // default  还可以设置圆角图片new RoundedBitmapDisplayer(20)                .build();        return options;    }}
   
 //小圆点
   
<?xml version="1.0" encoding="utf-8"?>xmlns:android="http://schemas.android.com/apk/res/android">        android:color="#00ff00"/>    //角的弧度    android:radius="10dp"/>    //大小    android:width="10dp" android:height="10dp"/>

更多相关文章

  1. Android的图片缩放、拖动
  2. android 获取缓存文件的地址
  3. android 批量上传图片
  4. Error:java.util.concurrent.ExecutionException:com.android.id
  5. gridView ---图片显示类九宫格
  6. Android(安卓)WebView缓存机制详解
  7. EditText中inputType="number"还可输入字母的设置
  8. Android设置屏幕方向
  9. Android(安卓)CV系列 > 可拖拽布局 拉长 CoordinatorLayout +Bot

随机推荐

  1. mysql 自增列id 最大为多少 一直insert会
  2. MySQL的事务隔离级别以及设置
  3. MySQL---数据库从入门走向大神系列(三)-
  4. 阿里云服务器远程连接mysql
  5. 迁移外键与Laravel中雄辩的关系
  6. MySQL] 行列转换变化各种方法实现总结(行
  7. 【Java Web】简易商品信息管理系统——首
  8. oracle、mysql、db2三大数据库分页方法的
  9. MYSQL安装--小白教程
  10. MySQL—嵌套select使用该表时如何从表中