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

发布时间 - 2026-01-11 01:13:56    点击率:

最近做的一个项目是把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,欢迎大家进行交流.

效果:

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


# Android  # html  # svg  # Android把svg图片转为jpg保存到相册图库  # android异步加载图片并缓存到本地实现方法  # Android中Glide加载库的图片缓存配置究极指南  # Android加载大分辨率图片到手机内存中的实例方法  # Android中ListView异步加载图片错位、重复、闪烁问题分析及解决方案  # Android实现加载广告图片和倒计时的开屏布局  # Android中自定义加载样式图片的具体实现  # Android 异步加载图片分析总结  # Android中使用二级缓存、异步加载批量加载图片完整案例  # Android关于Glide的使用(高斯模糊、加载监听、圆角图片)  # 加载  # 开源  # 我用  # 的是  # 我就  # 我要  # 就不  # 没办法  # 较多  # 有几个  # 可以直接  # 大了  # 欢迎大家  # 想办法  # 想用  # 需要注意  # 做多  # 大家多多  # 进行交流  # 这行 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 阿里云高弹*务器配置方案|支持分布式架构与多节点部署  品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?  nginx修改上传文件大小限制的方法  🚀拖拽式CMS建站能否实现高效与个性化并存?  Laravel任务队列怎么用_Laravel Queues异步处理任务提升应用性能  Laravel怎么生成URL_Laravel路由命名与URL生成函数详解  laravel怎么配置Redis作为缓存驱动_laravel Redis缓存配置教程  为什么要用作用域操作符_php中访问类常量与静态属性的优势【解答】  php静态变量怎么调试_php静态变量作用域调试技巧【解答】  焦点电影公司作品,电影焦点结局是什么?  javascript基本数据类型及类型检测常用方法小结  Laravel Artisan命令怎么自定义_创建自己的Laravel命令行工具完全指南  Laravel如何实现URL美化Slug功能_Laravel使用eloquent-sluggable生成别名【方法】  HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】  Laravel怎么使用artisan命令缓存配置和视图  图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?  如何用已有域名快速搭建网站?  javascript中数组(Array)对象和字符串(String)对象的常用方法总结  Laravel Blade模板引擎语法_Laravel Blade布局继承用法  韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐  linux top下的 minerd 木马清除方法  如何在搬瓦工VPS快速搭建网站?  Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑  黑客如何利用漏洞与弱口令入侵网站服务器?  Bootstrap整体框架之CSS12栅格系统  公司门户网站制作流程,华为官网怎么做?  简单实现jsp分页  Laravel Eloquent访问器与修改器是什么_Laravel Accessors & Mutators数据处理技巧  如何在万网开始建站?分步指南解析  UC浏览器如何设置启动页 UC浏览器启动页设置方法  Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程  Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】  如何快速上传自定义模板至建站之星?  Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置  Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践  如何用虚拟主机快速搭建网站?详细步骤解析  Laravel如何实现API速率限制?(Rate Limiting教程)  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  Win11怎么查看显卡温度 Win11任务管理器查看GPU温度【技巧】  免费网站制作appp,免费制作app哪个平台好?  Laravel怎么写单元测试_PHPUnit在Laravel项目中的基础测试入门  如何用免费手机建站系统零基础打造专业网站?  百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧  如何选择PHP开源工具快速搭建网站?  中国移动官方网站首页入口 中国移动官网网页登录  Win11摄像头无法使用怎么办_Win11相机隐私权限开启教程【详解】  Laravel Asset编译怎么配置_Laravel Vite前端构建工具使用  JS中对数组元素进行增删改移的方法总结  Laravel控制器是什么_Laravel MVC架构中Controller的作用与实践  济南网站建设制作公司,室内设计网站一般都有哪些功能?