Andoid实战 - 个人App 乐逗项目 (引导页优化,一些错误)
来源:互联网 发布:软件图标大全单个 编辑:程序博客网 时间:2024/06/06 03:39
1.回顾
这篇文章呢,本来是昨天应该写呢,因为追剧了,延迟到了今天;昨天找了找,数据来源和wordpress JSON API 有关的插件,还不错,提供了文章的API操作和用户的API操作,还没使用过,这里就不做过多的评价。
(还是使用习惯的HTML编辑器写吧,MarkDown 还不习惯排版)
2.实现
(1)引导页优化;
(2)使用Android Studio 时,两个错误;
(3)Design Support Library22.2 学习
3.引导页优化
3.1效果图
3.2 优化
昨天在真机(小米4)上测试了下,以失败而告终,Android Stuido 也不打印logcat .这是第一次遇到这种情况,后在手机开发者选项里,将程序崩溃的弹窗打开了.
小米系统这还不错,自己输出了log , 看后,发现是内存溢出问题; 这就很明显了,目前是静态的,所以图片加载是 drawable 下的, 图片也不大55k左右,加载到内存中占得大了.后开始优化并添加了切换效果:
优化:
(1).ViewpagerAdapter 独立实现;
将pagerAdapter 单独分离出来,将图片id 作为参数,在适配的时候,才去加载 图片资源,并通过 findviewbytag() , 获得对应的imageview 进行操作;
package labelnet.cn.ledou.adpater;import android.content.Context;import android.graphics.Bitmap;import android.support.v4.view.PagerAdapter;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import labelnet.cn.ledou.util.PictureUtil;public class ViewPagerAdapter extends PagerAdapter { /** * Welcome引导页适配器 * ViewPager的适配器 */ private int [] ids; private Context context; /** * 构造函数 * @param ids * @param context */ public ViewPagerAdapter(int [] ids,Context context){ this.ids=ids; this.context=context; } @Override public int getCount() { return ids.length; } @Override public boolean isViewFromObject(View view, Object o) { return view == o; } /** * 重写 instantiateItem 方法 * * @param container * @param position * @return */ @Override public Object instantiateItem(ViewGroup container, int position) { Bitmap bitmap=PictureUtil.readBitMap(context, ids[position]); ImageView imageView=new ImageView(context); imageView.setTag(ids[position]); imageView.setImageBitmap(bitmap); imageView.setScaleType(ImageView.ScaleType.FIT_XY); container.addView(imageView); return imageView; } /** * 重写 destroyItem 方法 * * @param container * @param position * @param object */ @Override public void destroyItem(ViewGroup container, int position, Object object) { //通过tag 移除 对应的ImageView ImageView imageView=(ImageView)container.findViewWithTag(ids[position]); container.removeView(imageView); } }
(2).Viewpager 切换动画实现;
动画的实现是通过官方提供的切换效果来实现,这里参考我的文章:Viewpager动画实现
我这里实现的缩放的动画,实现类为:
package labelnet.cn.ledou.anim;import android.annotation.SuppressLint;import android.support.v4.view.ViewPager;import android.view.View;public class DepthPageTransformer implements ViewPager.PageTransformer { /** * Viewpager 切换动画实现; */ private static final float MIN_SCALE = 0.75f; @SuppressLint("NewApi")public void transformPage(View view, float position) { int pageWidth = view.getWidth(); if (position < -1) { // [-Infinity,-1) // This page is way off-screen to the left. view.setAlpha(0); } else if (position <= 0) { // [-1,0] // Use the default slide transition when moving to the left page view.setAlpha(1); view.setTranslationX(0); view.setScaleX(1); view.setScaleY(1); } else if (position <= 1) { // (0,1] // Fade the page out. view.setAlpha(1 - position); // Counteract the default slide transition view.setTranslationX(pageWidth * -position); // Scale the page down (between MIN_SCALE and 1) float scaleFactor = MIN_SCALE + (1 - MIN_SCALE) * (1 - Math.abs(position)); view.setScaleX(scaleFactor); view.setScaleY(scaleFactor); } else { // (1,+Infinity] // This page is way off-screen to the right. view.setAlpha(0); } }}
调用实现:
vp_welcome = (ViewPager) findViewById(R.id.vp_welcome); //设置适配器 ViewPagerAdapter pagerAdapter=new ViewPagerAdapter(imagesids,this); //设置 切换动画 vp_welcome.setPageTransformer(true, new DepthPageTransformer()); vp_welcome.setAdapter(pagerAdapter);
(3).解决Viewpager内存溢出问题,通过Pictureutil实现对图片进行压缩实现;
这里的实现通过 质量压缩实现 ,实现方法为(前面已经封装有单独的实现类):
/** * 以最省内存的方式读取本地资源的图片 * @param context * @param resId * @return */ public static Bitmap readBitMap(Context context, int resId){ BitmapFactory.Options opt = new BitmapFactory.Options(); opt.inPreferredConfig = Bitmap.Config.RGB_565; opt.inPurgeable = true; opt.inInputShareable = true; //获取资源图片 InputStream is = context.getResources().openRawResource(resId); return compressImage(BitmapFactory.decodeStream(is,null,opt)); } /** * 1.质量压缩 * * @param image * @return */ public static Bitmap compressImage(Bitmap image) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); image.compress(Bitmap.CompressFormat.JPEG, 100, baos);//质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中 int options = 100; while (baos.toByteArray().length / 1024 > 100) { //循环判断如果压缩后图片是否大于100kb,大于继续压缩 baos.reset();//重置baos即清空baos image.compress(Bitmap.CompressFormat.JPEG, options, baos);//这里压缩options%,把压缩后的数据存放到baos中 options -= 10;//每次都减少10 } ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());//把压缩后的数据baos存放到ByteArrayInputStream中 Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, null);//把ByteArrayInputStream数据生成图片 return bitmap; }
4.两个错误
在使用Android Studio的时候,配置Gradle,加载 兼容包的时候,出现了两处错误;
4.1.Error:Execution failed for task ':app:dexDebug'.
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/usr/local/jdk1.7.0_79/bin/java'' finished with non-zero exit value 2
原因:因为重复引用了jar包,在Android Studio 中注释 compile fileTree(dir: 'libs', include: ['*.jar']) 即可; 如果需要使用libs下的 可以单独引入;
4.2.Error:(2) Error retrieving parent for item: No resource found that matches the given name 'android:TextAppearance.Material.Widget.Button.Inverse'. Error:(2) Error retrieving parent for item: No resource found that matches the given name 'android:Widget.Material.Button.Colored'.
原因:自己的工程sdk版本低出错; 解决,将引入的改为 sdK 版本改为 22 ,和 引入的 compile 'com.android.support:design:22.2.1'
compile 'com.android.support:appcompat-v7:22.2.1' , 不要 23 的;目前 22的就该使用了;
http://blog.csdn.net/linshijun33/article/details/48254583 希望可以提供帮助
5.结语
因为在Android Stuido 上开发,所以难免遇到各种困难;这里我说说在使用兼容包的时候的一些事;在使用v7兼容包和design 兼容控件的时候,需要在 build.gradle 中配置,后做同步操作,这是需要注意应用的当前sdk的版本,最后和你的sdk版本一样的区间,比如我的 sdk为22 ,一定要配置为 23以下的兼容包 ; 还有最主要的是,现在(2015-10-21) appcompat-v7:23 以至于大于23的最好不要使用,不然频频出错,特别烦人;建议使用小的版本实现。
- Andoid实战 - 个人App 乐逗项目 (引导页优化,一些错误)
- Android实战 - 个人App 乐逗项目 (实现初始化页面,引导页)
- Android实战 - 个人App 乐逗项目 开启篇
- Android实战-个人App乐逗项目(第一阶段:微信精选文章完成与总结)
- Android实战 - 个人乐逗项目 (项目改动,优化和总结)
- Android 实战 - 个人App乐逗项目 之 查看图片,查看GIF封装
- Android 实战 - 个人App乐逗项目(查看网页链接封装,播放视频封装)
- Android 实战 - 个人APP乐逗项目(内部音乐播放器实现,开源MaskProgressView使用)
- 个人作品—APP引导页
- andoid x项目的优化 1
- andoid x项目的优化 1
- 个人项目整理(博客阅读引导)
- App项目之新手引导页
- Android实战简易教程<六十四>(Android APP 引导页实现-第一次应用进入时加载)
- 孙孙啊i之项目实战(三) 引导页
- 项目实战:引导动画-千变万化的ViewPager(文末小彩蛋)
- Android实战简易教程-第六十四枪(Android APP 引导页实现-第一次应用进入时加载)
- Android性能优化实战(一)----App启动时间优化
- Ubuntu下搜狗输入法—安装教程
- 下一代无线局域网演进趋势
- Ubuntu12.04 下Lua开发环境安装
- js常用工具类(二次更新)
- memcached集群负载均衡
- Andoid实战 - 个人App 乐逗项目 (引导页优化,一些错误)
- java如何获取本周一(哪天都可以)的日期
- 网站模版html,响应式布局
- pushviewcontroller popviewcontroller presentationController dismissViewController 配套问题
- unity--鼠标画线、画图实现
- String
- Android----Fragment的基本用法
- AndroidStudio导出jar包
- 5.4.2 用画刷填充内部