Android加载html中的svg格式图片进行显示的两种方式
来源:互联网 发布:字符数组结束标志 编辑:程序博客网 时间:2024/06/05 01:20
最近做的一个项目是把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,欢迎大家进行交流.
效果:
最近又发现一个新的库,可以更加简单的加载svg图片,效果和上面相同,同时上面那种方法在华为手机上有点问题,下面这个方法是没有问题的,更加强大.它就是sharp这个库,它和glide加载图片用法相同,非常简单.
只用在app中添加依赖:compile ‘com.pixplicity.sharp:library:1.1.0’
代码:
Sharp.loadAsset(context.getAssets(), replaceUrl).into(photoView);
一句话就搞定了,主意这里的replaceUrl是assets目录的相对路径.是不是特别简单,欢迎大家进行交流.
阅读全文
0 0
- Android加载html中的svg格式图片进行显示的两种方式
- android textView WebView 两种方式 显示html 格式文本 带图片
- html中img显示图片的两种常用方式
- qt 加载SVG格式的图片
- android imageloader 两种加载图片方式的差异
- Android加载GIF图片的两种方式
- 两种图片加载方式的区别
- ios 图片加载的两种方式
- iOS 图片加载的两种方式
- Android 中的两种压缩图片方式
- 关于Android加载HTML页面中的图片显示问题的解决办法
- html 图片显示的几种方式
- 图片异步加载和图片缓存的两种方式
- 【PyQt4实例8】SVG格式图片的显示【转】
- 在eclipse中显示不出来.svg格式的图片
- android的TextView使用Html(图片显示)格式。。。。。。
- android的TextView使用Html(图片显示)格式。。。。。。
- android的TextView使用Html(图片显示)格式
- T
- leetcode 581. Shortest Unsorted Continuous Subarray
- ubuntu远程桌面无法连接的问题
- 情话交流(二)
- 51Nod 1016 水仙花数 打表
- Android加载html中的svg格式图片进行显示的两种方式
- 多元线性回归之Spss实现
- easyui 界面中输入框(textbox)和下拉框(combobx)的onchange事件
- 鼠标移入文字上向右移动效果
- C++头文件的若干说明和const对象定义
- 重写 ccui.text 的clone方法。修复clone字体描边
- IP地址划分问题
- nginx+多个tomcat
- 论人生之转折