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引导页设计
大家在安装好一个应用后,第一次打开时往往会出现一个使用引导页,形式一般为三.四张图片,随着我们的滑动进行切换,在最后一页会有一个进入应用的按钮,我们通过点击这个按钮可以进入应用,其实这其中没有太多的复 ...
- Xamarin.Android 引导页
http://blog.csdn.net/qq1326702940/article/details/78665588 https://www.cnblogs.com/catcher1994/p/555 ...
- Android引导页过多导致OOM内存泄漏
摘要:前几天推广我们APP的时候,有些手机加载引导页的时候会闪退或崩溃,在Bugly显示是OOM异常. 然后Bugly上面显示的解决方案是: 该异常表示未能成功分配字节内存,通常是因为内存不足导 ...
- android引导页的实现 及跳转到主页面
第一个activity package com.qualitypicture.activity; import java.util.ArrayList; import java.util.List; ...
- Android 引导页的代码
布局代码 <android.support.v4.view.ViewPager android:id="@+id/viewpage" android:layout_width ...
- Android引导页
源码地址:https://github.com/myloften/IntroSliderSample 博客地址:http://blog.csdn.net/loften_93663469/article ...
- Android 高级UI设计笔记22:Android 指示引导页(带圆点)
1. 引导页: 我们在安装某个软件首次运行时,大部分都会有一个引导页的提示,介绍软件新功能的加入或者使用说明等,支持滑动且下面会有几个圆点,显示共有多少页和当前图片的位置,类似如下效果: 2. 引导页 ...
- android 项目学习随笔二(引导页 )
1.引导页 1.定义灰色.红色圆点的shape XML文件 2.定义布局文件,利用相对布局文件定位,利用线性布局加载灰色圆点,imageview加载红色圆点 3.android.support.v4. ...
- Android:启动引导页实现
前言 基本上现在所有的应用都会有一个欢迎界面,在欢迎界面对应用做一个整体的介绍,然后在跳入到主界面,这次要说的这个引导页就是带翻页的引导页.效果如下所示
随机推荐
- MAC终端命令行下用sublime、vscode、atom打开文件或目录
要知道,有时候一些小技巧,能极大的加大我们的工作效率. 在MAC下开发,用的最多的还是终端,我的终端环境是iterm2+ohmyzsh:步入正题前先给大家介绍几个小技巧: 第一个: 打开findle, ...
- Qt 拷贝文件目录
bool copyDir(const QString &source, const QString &destination, bool override) { QDir direct ...
- IIS服务器多域名证书绑定443端口解决方案
一个服务器IIS要绑定多个HTTPS站点(该方法在此之前,有进行测试其他网站域名的ssl证书,测试没有问题) 默认情况一个服务器的IIS只能绑定一个HTTPS也就是443端口 要实现多个站点对应HTT ...
- ionic2+angular2中踩的那些坑
好久没写什么东西了,最近在做一个ionic2的小东西,遇到了不少问题,也记录一下,避免后来的同学走弯路. 之前写过一篇使用VS2015开发ionic1的文章,但自己还没摸清门道,本来也是感兴趣就学习了 ...
- SQL Server 中怎么查看一个字母的ascii编码或者Unicode编码
参考文章:微信公众号文章 在sql中怎么查看一个字符的ascii编码,so easy !! select ASCII('a') SELECT CHAR(97) charNum SELECT UNICO ...
- spring aop注解方式与xml方式配置
注解方式 applicationContext.xml 加入下面配置 <!--Spring Aop 启用自动代理注解 --> <aop:aspectj-autoproxy proxy ...
- Entity Framework Code First Migrations--EF 的数据迁移
1. 为了演示方便,首先新建一个控制台项目,然后添加对entityframework的引用 使用nuget控制台执行: Install-Package EntityFramework 2.新建一个实体 ...
- JS中的对象
什么事对象?对象是一个整体,对外提供一些操作.而面向对象,就是使用对象时,只关注对象提供的功能,不关注内部的细节,面向对象是一种通用思想. 面向对象编程的特点: 抽象:抓住核心问题: 封装:不考虑内部 ...
- Android调用webservice的例子
1.需要一个ksoap2-android-assembly-2.5.2-jar-with-dependencies.jar的架包. 2.需要知道webservice的命名空间 // WSDL文档中的命 ...
- [转]ASP.NET应用程序生命周期趣谈(一)
这几天一直在看ASP.NET应用程序生命周期,真是太难了,我理解起来费了劲了,但偏偏它又是那么重要,所以我希望能给大家带来一篇容易理解又好用的文章来帮助学习ASP.NET应用程序生命周期.这篇就是了. ...