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:启动引导页实现
前言 基本上现在所有的应用都会有一个欢迎界面,在欢迎界面对应用做一个整体的介绍,然后在跳入到主界面,这次要说的这个引导页就是带翻页的引导页.效果如下所示
随机推荐
- EF 在controller 带参数跳转到新的网址
参考文章:http://blog.csdn.net/zhensoft163/article/details/7174661 我用到了这一种方式: 跳转到同一Controller 里面的不同Action ...
- 在公有云AZURE上部署私有云AZUREPACK以及WEBSITE CLOUD(四)
(四)搭建Website Cloud环境 1安装CONTROLLER主机 在开始安装Web site Cloud之前,读者应该对该服务的拓扑结构有个大概了解. 如图: Controller是非常重要的 ...
- 配置 EPEL yum 源
当我们在linux上, 使用yum 安装包时,报错如下: Loaded plugins: product-id, refresh-packagekit, security, subscription- ...
- JAVA 日期格式工具类DateUtil.java
DateUtil.java package pers.kangxu.datautils.utils; import java.text.SimpleDateFormat; import java.ut ...
- 三大框架之hibernate入门
hibernate入门 1.orm hibernate是一个经典的开源的orm[数据访问中间件]框架 ORM( Object Relation Mapping)对象关 ...
- Atitit.log日志技术的最佳实践attilax总结
Atitit.log日志技术的最佳实践attilax总结 1. 日志的意义与作用1 1.1. 日志系统是一种不可或缺的单元测试,跟踪调试工具1 2. 俩种实现[1]日志系统作为一种服务进程存在 [2] ...
- List Set Map
List Set 都是接口,都继承了Collection接口 ArrayList LinkList 直接实现了List接口 HashSet 实现了Set接口 TreeSet继承父类AbstractS ...
- jQuery技巧大放送
1.关于页面元素的引用 通过jquery的$()引用元素包括通过id.class.元素名以及元素的层级关系及dom或者xpath条件等方法,且返回的对象为jquery对象(集合对象),不能直接调用do ...
- Apache Spark 1.6 Hadoop 2.6 Mac下单机安装配置
一. 下载资料 1. JDK 1.6 + 2. Scala 2.10.4 3. Hadoop 2.6.4 4. Spark 1.6 二.预先安装 1. 安装JDK 2. 安装Scala 2.10.4 ...
- Scala 包
包的绝对地址_root_.开始 如_root_.scala.collection.mutable.ArrayBuffer