首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

android如何加载长图

思路:那就是对于一张巨型图片我们可否每次指定一块区域加载显示,然后通过改变这个区域完成整张巨图的加载呢?这样内存中只有完整图片的一块区域。...接下来通过自定义一个可以加载巨图的View展开说明: 2、设置图片 前面说到至少需要两个方法:1、设置图片 2、指定显示区域 我们先来看如何设置图片: mOptions实际就是BitmapFactory.Options...3、指定显示区域 在onMeasure方法中我们需要指定要加载图片的区域Rect的四个顶点位置。...四、改变区域完成巨图加载 1、Scroller + GestureDetector 上面说到我们通过Rect指定显示区域,那通过改变要显示的区域位置不就可以完成整张图片的加载了?...至此如何加载显示一张巨图就实现了。

83020

android加载大图,防止oom

高效加载大图片 我们在编写Android程序的时候经常要用到许多图片,不同图片总是会有不同的形状、不同的大小,但在大多数情况下,这些图片都会大于我们程序所需要的大小。...为了保证内存的使用始终维持在一个合理的范围,通常会把被移除屏幕的图片进行回收处理。此时垃圾回收器也会认为你不再持有这些图片的引用,从而对这些图片进行GC操作。...用这种思路来解决问题是非常好的,可是为了能让程序快速运行,在界面上迅速地加载图片,你又必须要考虑到某些图片被回收之后,用户又将它重新滑入屏幕这种情况。...其中最核心的类是LruCache (此类在android-support-v4的包中提供) 。...但是现在已经不再推荐使用这种方式了,因为从 Android 2.3 (API Level 9)开始,垃圾回收器会更倾向于回收持有软引用或弱引用的对象,这让软引用和弱引用变得不再可靠。

1.3K90
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Android开发笔记(一百二十四)自定义相册

    该视图工厂对象从ViewFactory派生而来,内部需要重写makeView方法来返回视图工厂里的具体视图。对于ImageSwitcher来说,视图工厂应当返回的当然是ImageView对象了。...可是还没有实现左右滑动切换图片的功能,既然Gallery上的小图能够左右滑动,那么我们希望ImageSwitcher的大图也能够左右滑动,这时要借助于手势事件来实现滑动切换功能。...= null) { iv_palette.setBackgroundColor(swatch.getRgb()); } } } 卡片视图CardView CardView也是Android...该控件的实现原理并不复杂,事实上早期便有许多人自己写了类似卡片效果的控件,只不过后来Android顺应民意推出了原生的卡片视图。...CardView源码中引用了android.support.v7.cardview.R.styleable,而开发者自己的工程包名不是android.support.v7.cardview,所以就会找不到这个

    2K20

    在Android中高效的加载大图

    原文地址:ronaldong 原文作者: https://juejin.im/post/5b0e6e6a5188251570336972 将大图加载到内存中总是令人痛苦,因为我们经常会在应用的崩溃报告中看到...大家都知道,Android系统的内存有限。我们必须牢记这一点。 stackoverflow上有很多关于大图加载的问题,当你的应用程序遇到OOM的时候,你可以选择直接复制粘贴其中的答案来解决这个问题。...因此,你完全可以略过本篇文章,但我想介绍一些加载大图的基础知识及其实际工作的原理。 我只想解释图片解码背后的逻辑。我建议你使用Picasso或Glide来加载图片。没有必要重新发明轮子。...一旦将图片加载到内存中,它就不再被压缩,并占用尽可能多的图片的所有像素所需的内存空间。 加载大图的步骤 获取图片的宽和高 根据图片的宽和高计算缩放比 根据缩放比将图片加载到内存中。...在android官方文档中,计算结果是2的幂次方。

    82820

    Android5.0新特性-Material Design

    让视图产生阴影 使用RecyclerView和CardView 定制动画 intel x86模拟器 下载和安装intel x86模拟器加速器 之前的ARM模拟器,是以软件的形式模拟,所以很慢~x86可以选这使用宿主机器的...RecyclerView 详见本人另一篇博客 RecyclerView完全解读 ---- 立体卡片CardView 详情请查看鄙人CradView的使用 ---- 视图和阴影 Material Design...Z = elevation + translationZ 通过布局文件和Java代码设置视图的阴影 通过布局文件设置 在xml中设置View的视图高度 android:elevation="Xxdp"...:layout_gravity="center" android:text="@string/cardview_contents" android:elevation="10dp" /> 通过...ripple_drawable资源 矢量drawable资源 在Android中使用SVG矢量图 SVG设计器 实现SVG矢量动画 APP的兼容性

    59620

    iOS 仿支付宝银行卡界面(支持Swift和OC)

    为了实现相应的功能,仿照支付宝的银行卡卡包开发出相应的页面,页面长这个样子: 二:说明目录 创建钱包视图容器WalletView 初始化WalletView并加载钱包头部视图walletHeader 在钱包视图中重新加载卡片视图...初始化WalletView并加载钱包头部视图walletHeader 在需要加载钱包的地方初始化WalletView,并自定义头部视图walletHeader和卡片视图,Demo 中以ViewController...在钱包视图中重新加载卡片视图 在钱包视图中重新加载卡片视图,在这里为了灵活修改方便使用,页面布局可以自定义,Demo中模仿支付宝页面进行设计,在CardView视图中,主要实现页面的交互等功能,具体的UI...实现在ColoredCardView中实现并继承于CardView,下面会详细说明,重新加载卡片视图方法源码如下: open func reload(cardViews: [CardView]) {...创建卡片视图ColoredCardView继承于CardView 创建卡片视图ColoredCardView继承于CardView,这个视图主要实现UI界面以及加载内容,定义界面属性代码如下: class

    1.4K20

    Android Studio使用Vector创建矢量图并加载

    先来一张效果图: ? 滑稽.png 1.在工程的res目录下新建一个drawable目录,如图所示: ? 2.点击右键 ->New --> Vector Asset ?...关于png或者jpg转成SVG矢量图的方法,请看链接: http://www.jianshu.com/p/456157dfe0b0 在线转换SVG网址: https://www.vectorizer.io...4.这时候我们就可以在drawable目录看到一个ic_huaji.xml的文件了,打开右边的预览图就可以看到了。...【注:这个大的背景图是我下载了一个sexy Editor的插件,我弄的一张滑稽的图作为背景的,这个跟我们今天讲的vector没有任何关系的。】 ? 5.下面是重点了。...(1) 首先,在布局里面设置属性 android:background="@drawable/ic_huaji" ? (2) 在Activity里面直接引用这个布局。 ?

    2.9K10

    Android:加载网图时精确获取图片格式

    使用PhotoView加载《清明上河图》这种巨图时,图片会展示为一个小长条,并且极易产生OOM。...为了解决这个问题,先是参考 鸿洋大神的 《Android 高清加载巨图方案 拒绝压缩图片》这篇文章,但是实现的效果特别卡。...该组件底层是使用分段加载的模式实现,能够支持巨图加载,内部也封装了手势缩放。但是,该组件不支持 GIF动图!...基于以上两个控件,在加载网络图片时,会先判断是否是GIF动图,是动图则使用PhotoView展示;如果是静态图,不区分是巨图还是普通图,统一使用SubsamplingScaleImageView加载。...longImg.setDoubleTapZoomDuration(100); //这一行和setMinScale() 配合使用,可以解决双击缩小视图时直接缩到最小的问题

    2K30

    巧用layer-list实现按钮背景阴影、投影

    很多人会想,现在安卓5.0以上原生控件已经支持android:elevation=""属性设置投影了,再者也可以使用CardView给需要投影的布局控件来包一层,因为CardView也是带app:cardElevation...当我在实际开发中时,项目需求几乎所有的控件按钮都是带阴影的,列表项、详情项等等,如果使用切图肯定是不大现实的,占用空间太大。...当我使用上面提到的android:elevation=""与app:cardElevation=""属性时遇到瓶颈了,这两个属性可以用也很方便,但是遇上苛刻的UI就不行了,因为颜色差值不对,与UI效果图相差太大...所以我弃用了这个方案,改用了layer-list使用视图层叠的方式实现,最后将其设置为背景图即可。...代码如下: android="http://schemas.android.com/apk/res/android"> <!

    2.4K20

    Android UI布局优化之ViewStub

    大家好,又见面了,我是你们的朋友全栈君。...下面看看加载视图前后的对比图: 为了说明视图树在加载前后的对比,我使用hierarchyviewer视图树查看工具,做了一个前后对比图: 加载前视图树: 加载后视图树: 从上面的两个视图树中我们明显发现...也就是说,在调用inflate方法之前,ViewStub一直存在于视图树中,当调用inflate之后,ViewStub被加载的视图替换,到此,ViewStub的作用完成,之后ViewStub可能被内存回收...= null) { // 如果引用的视图未被垃圾回收器回收,则设置其可见性 view.setVisibility(visibility);...} else { // 如果引用的视图已经被垃圾回收器回收,则抛出异常 // 这也就是为什么setVisibility可以调用多次,但是并不推荐这样做的原因

    1K20
    领券