Android 引导页公共方法LeaderPager

Posted 我辈年轻

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 引导页公共方法LeaderPager相关的知识,希望对你有一定的参考价值。

SimpandroidFarme是近期脑子突然发热想做的android快速开发的框架,目标是模块化

常用的控件,方便新手学习和使用。也欢迎老鸟来一起充实项目:项目地址

 引导页是我们开发app很常用的功能,但是一般都是第一此运行才会执行,每写个项目

都要为这种一次性的东西写那么多重复代码太讨厌啦~

现在再也不用担心这个问题了!

一般引导有两种图片源 , 本地图片/ 网络图片

目标使用方法:

  使用本地提供的图片 id

  参数一: viewpager 

  参数二: 图片url集合(使用本地则传null)

  参数三: 图片id 集合(使用url则传null)

  参数四: 引导完成后 跳转到的页面

   new LeaderPager(Second.this).LeaderPagerAdapter(viewPager , null , imgid , MainActivity.class);

是不是看上去使用很方便啊~!!

上代码:

LeaderPager:

 

package com.wbnq.simpleandroidframe.plugs;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by guwei on 16-11-4.
 */
public class LeaderPager {

    Context mContext;
    List<ImageView> mImageViews = new ArrayList<>();

    private static final String TAG = "LeaderPager";

    public LeaderPager(Context context) {
        this.mContext = context;
    }


    /**
     * 参数二 三 可选填入
     * <p>
     * 参数二 不为空时 使用bitmap图片 否则使用 mipmap内图片
     **/
    public void LeaderPagerAdapter(ViewPager viewPager, final List<String> imgs_url, final List<Integer> imgs_id , final Class nextpage) {

        viewPager.setAdapter(new PagerAdapter() {

            @Override
            public Object instantiateItem(ViewGroup container, int position) {
                ImageView imageView = new ImageView(mContext);

                if (imgs_url != null) {

                     imageView.setTag(imgs_url.get(position));
                     new ImageLoader().showImageByThread(imageView , imgs_url.get(position));
                    //imageView.setImageBitmap();
                } else if (imgs_id != null) {
                    imageView.setImageResource(imgs_id.get(position));
                } else {
                    Log.e(TAG, "banner方法: 未传入图片参数 , 请检查参数是否填写正确!");
                }
                imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
                container.addView(imageView);
                mImageViews.add(imageView);
                return imageView;
            }


            //移除imageview
            @Override
            public void destroyItem(ViewGroup container, int position, Object object) {
                Log.e(TAG, "destroyItem: position = " + position );
                container.removeView(mImageViews.get(position));
                if(position == 0){
                    Intent intent = new Intent(mContext , nextpage);
                    mContext.startActivity(intent);
                }
            }

            @Override
            public int getCount() {
                int count;
                if(imgs_url != null){
                    count = imgs_url.size();
                }else{
                    count = imgs_id.size();
                }
                return count;
            }

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

}

 

就是一般viewpager的使用方法不多说

如果想要使用网络图片功能先需要配合imageLoader一起使用哦!

ImageLoader:

package com.wbnq.simpleandroidframe.plugs;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.util.LruCache;
import android.widget.ImageView;

import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;


/**
 * Created by guwei on 16-4-13.
 */
public class ImageLoader {

    private ImageView mImageView;
    private String mUrl;
    //创建cache
    private LruCache<String, Bitmap> mCaches;

    private static final String TAG = "ImageLoader";
    public ImageLoader() {
        //获得最大可用内存
        int maxMemory = (int) Runtime.getRuntime().maxMemory();
        int cacheSize = maxMemory / 3;
        mCaches = new LruCache<String, Bitmap>(cacheSize) {
            @Override
            protected int sizeOf(String key, Bitmap value) {
                //在每次存入缓存的时候调用,返回的是bitmap的大小
                return value.getByteCount();
            }
        };
    }

    //添加图片到缓存中 (cache类似map)
    public void addBitmapToCache(String url, Bitmap bitmap) {
        //如果缓存没有这张图片就将图片存到缓存中
        if (getBitmapFormCache(url) == null) {
            mCaches.put(url, bitmap);
        }
    }

    //从缓存中取出图片
    public Bitmap getBitmapFormCache(String url) {
        return mCaches.get(url);
    }


    private Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);

            if (mImageView.getTag().equals(mUrl)) {
                mImageView.setImageBitmap((Bitmap) msg.obj);
            }
        }
    };

    //在线程中通过url 加载图片
    public void showImageByThread(final ImageView image, final String url) {

        mImageView = image;
        mUrl = url;
        Bitmap bitmap = getBitmapFormCache(url);
        if (bitmap == null) {
            new Thread() {
                @Override
                public void run() {
                    super.run();
                    Bitmap bitmap = getBitmapFormURL(url);
                    Message msg = Message.obtain();
                    msg.obj = bitmap;
                    handler.sendMessage(msg);
                    //Log.i("xyz", "1");
                }
            }.start();
        } else {
            image.setImageBitmap(bitmap);
        }

    }

    public Bitmap getBitmapFormURL(String urlString) {

        Bitmap bitmap = null;
        InputStream is = null;
        try {
            URL url = new URL(urlString);
            try {
                HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                is = new BufferedInputStream(connection.getInputStream());
                bitmap = BitmapFactory.decodeStream(is);
                connection.disconnect();
                addBitmapToCache(urlString, bitmap);

                Log.e(TAG, "getBitmapFormURL: 网络方法内部 获取图片 并将图片放入缓存 "+bitmap);
            } catch (IOException e) {
                e.printStackTrace();
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } finally {
            try {
                is.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return bitmap;
    }
}

注释的也比较到位,还有缓存功能哦!图片加载方法来自慕课大神--徐大神

就这样啦~~

都来看看女帝和露琪亚吧~还有一张是雏田哦!

 

以上是关于Android 引导页公共方法LeaderPager的主要内容,如果未能解决你的问题,请参考以下文章

android studio 欢迎页和引导页

Android基础控件——ViewPager实现带有动画的引导页

Android 引导页的代码

Android项目实战:实现第一次进入软件的引导页

Xamarin.Android 引导页

Xamarin.Android之引导页的简单制作