Android加载html中svg格式图片进行显示

最近做的一个项目是把assets目录中的html显示出来,但是因为html里面有一些工程图片,虽然我用ViewPager和PhotoView,进行显示放大了,但是因为工程图片的线条较多还是比较模糊.所以后来就想用svg图片来进行显示,至于svg是什么,我这里就不做多的说明,可以去网上搜一搜看看.因为svg和png jpg是不同的,没办法用glide(我图片加载框架用的是glide)进行加载,所以我就只能另想办法了,最后找到一个开源库,解决了我的问题,下面我也是用开源库做的,但是有几个坑需要注意:

开源库地址:https://github.com/japgolly/svg-android 在Android studio上可以直接去关联下载

接下来我贴下我的代码,主要就是ViewPager中的代码:

import android.content.Context; import android.graphics.Canvas; import android.graphics.drawable.PictureDrawable; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.view.View; import android.view.ViewGroup; import com.bumptech.glide.Glide; import com.larvalabs.svgandroid.SVG; import com.larvalabs.svgandroid.SVGBuilder; import java.io.IOException; import java.util.ArrayList; import uk.co.senab.photoview.PhotoView; class ViewPagerAdapter extends PagerAdapter { private Context context; private ArrayList<String> images; private Canvas canvas = new Canvas(); public ViewPagerAdapter(Context context, ArrayList<String> images) { this.context = context; this.images = images; } @Override public int getCount() { return images.size(); } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } @Override public Object instantiateItem(ViewGroup container, int position) { View view = View.inflate(context, R.layout.view_pager_item, null); PhotoView photoView = (PhotoView) view.findViewById(R.id.photoview); //注意 一定要加这行代码,不然会加载不出来 photoView.setLayerType(View.LAYER_TYPE_SOFTWARE, null); //拿到图片的url String url = images.get(position); //因为我要显示所有图片进行浏览 所以我用后缀名进行区分 if (url.endsWith(".svg")) { try { //获取assets目录下的svg图片的相对路径 String replaceUrl = url.replace("file:///android_asset/", ""); SVG svg = new SVGBuilder().readFromAsset(context.getAssets(), replaceUrl).build(); canvas.drawPicture(svg.getPicture()); //github上的svg.createDrawable()没有了,现在只有这个方法 PictureDrawable drawable = svg.getDrawable(); drawable.draw(canvas); photoView.setImageDrawable(drawable); } catch (IOException e) { e.printStackTrace(); } } else { //用Glide加载图片 Glide.with(context).load(url).into(photoView); } container.addView(view, ViewPager.LayoutParams.MATCH_PARENT, ViewPager.LayoutParams.MATCH_PARENT); return view; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); } }

因为也是刚接触svg,欢迎大家进行交流.

效果:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

时间: 2024-10-22 23:37:53

Android加载html中svg格式图片进行显示的相关文章

Android加载View中Background详解_Android

对大多数Android的开发者来说,最经常的操作莫过于对界面进行布局,View中背景图片的加载是最经常做的.但是我们很少关注这个过程,这篇文章主要解析view中背景图片加载的流程.了解view中背景图片的加载(资源的加载)可以让我们对资源加载的过程进行一些优化,另外当需要进行整个应用的换肤时,也可以更得心应手. View图片的加载,我们最常见的就是通过在XML文件当中进行drawable的设置,然后让Android系统帮我们完成,或者手动写代码加载成Bitmap,然后加载到View上.这篇文章主

Android加载View中Background详解

对大多数Android的开发者来说,最经常的操作莫过于对界面进行布局,View中背景图片的加载是最经常做的.但是我们很少关注这个过程,这篇文章主要解析view中背景图片加载的流程.了解view中背景图片的加载(资源的加载)可以让我们对资源加载的过程进行一些优化,另外当需要进行整个应用的换肤时,也可以更得心应手. View图片的加载,我们最常见的就是通过在XML文件当中进行drawable的设置,然后让Android系统帮我们完成,或者手动写代码加载成Bitmap,然后加载到View上.这篇文章主

android网络图片-Android加载大量网络图片

问题描述 Android加载大量网络图片 我获取大量网络图片显示在我的列表里边,就类似淘宝那种,我的方法是一下子把图片全取过来了,而且没有缓存,这样经常有内存溢出的错误,而且用户体验不好!我想请教一下,类似淘宝那样,屏幕划到哪儿,就消失图片到哪儿!之后的没显示的图片不加载,这种是怎么实现的!希望给出详细的思路,有源码的话更好了!谢谢哈 解决方案 Android加载大量网络图片出现内存溢出的处理Android ListView加载网络数据和图片Android高效加载大量图片 解决方案二: 建议使用

Android加载大分辨率图片到手机内存中的实例方法_Android

还原堆内存溢出的错误首先来还原一下堆内存溢出的错误.首先在SD卡上放一张照片,分辨率为(3776 X 2520),大小为3.88MB,是我自己用相机拍的一张照片.应用的布局很简单,一个Button一个ImageView,然后按照常规的方式,使用BitmapFactory加载一张照片并使用一个ImageView展示. 代码如下: 复制代码 代码如下: btn_loadimage.setOnClickListener(new View.OnClickListener() {            

android webview https网页中的http图片加载不出来

问题描述 android webview https网页中的http图片加载不出来 RT,在项目中用webview加载一个https开头的网页,网页加载出来了,但网页里http开头的图片在android 4.4的手机上能加载出来,在android5.0.1 的手机上就加载不出来. android 5.0.1:The page at 'https://api.app-test.cn/activity/view?id=25' was loaded over HTTPS but displayed i

新浪微博-Android加载网络GIF图片

问题描述 Android加载网络GIF图片 我用URLConnection加载网络的GIF图片,然后播放,图片大小在3M-5M左右,第一次加载的时候,要花费30-40秒左右,但我观察新浪微博的GIF加载比较快, 基本10秒左右就完成的,保存原图后,图片也在4M左右,想问一下,是怎么实现的?都是第一次加载,缓存中还没有 解决方案 Android 加载.gif格式图片Android ListView加载网络数据和图片android listview加载网络图片 解决方案二: 建议你用Glide,Go

Android加载图片内存溢出问题解决方法

  这篇文章主要介绍了Android加载图片内存溢出问题解决方法,本文讲解使用BitmapFactory.Options解决内存溢出问题,需要的朋友可以参考下 1. 在Android软件开发过程中,图片处理是经常遇到的. 在将图片转换成Bitmap的时候,由于图片的大小不一样,当遇到很大的图片的时候会出现超出内存的问题,为了解决这个问题Android API提供了BitmapFactory.Options这个类. 2. 由于Android对图片使用内存有限制,若是加载几兆的大图片便内存溢出.Bi

android 加载图片轻松避免OOM(out of memory)

在使用android加载图片的时候,经常会出现内存溢出,主要是由于android可使用的内存太小,而通过代码加载进来的图片,并不会被GC回收,于是我写了一个工具类用来加载图片,并且建立缓存,轻松避免内存溢出,废话不多说,上代码 [java] view plaincopy package l.test1.util;      import java.io.File;   import java.io.FileInputStream;   import java.io.FileNotFoundExc

Android关于Glide的使用(高斯模糊、加载监听、圆角图片)_Android

高斯模糊.加载监听.圆角图片这些相信大家都很熟悉,那如何实现这些效果,请大家参考本文进行学习. 1.引用 compile 'com.github.bumptech.glide:glide:3.7.0' 2.加载图片 2.1 基本加载 Glide.with(context)     .load(url)     .into(imageView); 2.2 设置加载中和加载失败的情况 Glide.with(context) .load(url) .placeholder(R.drawable.loa