我想从web加载svg文件并在imageView上显示此文件,对于普通的png或其他图像文件我使用Picasso库是否可以将此库用于svg文件?有没有办法从网上加载svg文件并在图像视图上显示?我使用svg-android库来显示svg文件,但我不知道如何从web获取svg图像所有示例都使用本地文件.
我有一个测试应用程序,我有一个ListView与一个项目,其中包含两个图像.
正如您在API 17设备中看到的那样,当API 10设备执行此操作时,设备不会显示播放按钮(SVG图像).我该如何解决这个问题?
我的布局文件:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ImageView
android:id="@+id/background"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:scaleType="centerCrop" />
<ImageView
android:id="@+id/forceground"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true" />
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
这是我设置图像的基本代码:
View preview = inflater.inflate(R.layout.list_video_preview, parent, false);
ImageView background = (ImageView)preview.findViewById(R.id.background);
ImageView forceground = (ImageView)preview.findViewById(R.id.forceground);
PictureDrawable play = SVGParser.getSVGFromResource(parent.getResources(), R.raw.play_blue).createPictureDrawable();
forceground.setImageDrawable(play);
Run Code Online (Sandbox Code Playgroud)
SVG paser来自svg-android.
我没有太多的运气包围我的头,所以我希望有人可以帮助我.
我使用svg-android从SVG获得了一个drawable,但是drawable没有缩放到视图.我能够找到的所有内容都说我应该直接绘制到画布并重新缩放画布,但是当我尝试它时,它似乎只是改变边界而不是缩放图像.
这是我到目前为止所尝试的:
ImageView testview = (ImageView)findViewById(R.id.testview);
//Get SVG and convert to drawable
SVG vector = SVGParser.getSVGFromResource(getResources(),R.drawable.testvector);
Drawable test = vector.createPictureDrawable();
testview.setBackground(test); //displays fine, but won't scale to the dimensions of
//the View
//function that clips the image but doesn't scale:
Drawable testTwo = new CustomPictureDrawable(vector.getPicture(),
(float)0.5, (float)0.5);
testView.setBackground(testTwo);
class CustomPictureDrawable extends PictureDrawable {
private float scalex, scaley;
public CustomPictureDrawable(Picture picture, float scalex, float scaley) {
super(picture);
this.scalex = scalex;
this.scaley = scaley;
}
@Override
public void draw(Canvas canvas) { …
Run Code Online (Sandbox Code Playgroud) 目的: 我想使用ImageView显示SVG图像文件.
尝试1:
我正在使用svg-android库来做到这一点.
我正在逐字逐句地跟进他们的教程.我只是将他们的代码粘贴到我的onCreate中,从onCreate中注释掉我的应用代码.
在此之前我有一个闪屏,但我怀疑这无论如何会干扰这一点.无论如何,我只会更改启动意图并发布更新.
我已将他们的jar添加到libs文件夹中并引用它.
结果1:
我正在测试三星Galaxy I93000(国际版)
我得到的只是一个白色的屏幕.
没有编译或运行时错误.
Logcat输出如下:
Run Code Online (Sandbox Code Playgroud)01-13 01:22:11.755: D/dalvikvm(24889): GC_FOR_ALLOC freed 52K, 7% free 12198K/12995K, paused 17ms, total 17ms 01-13 01:22:11.765: I/dalvikvm-heap(24889): Grow heap (frag case) to 17.000MB for 4642816-byte allocation 01-13 01:22:11.810: D/dalvikvm(24889): GC_CONCURRENT freed 1K, 5% free 16730K/17543K, paused 15ms+2ms, total 43ms 01-13 01:22:12.080: D/dalvikvm(24889): GC_FOR_ALLOC freed <1K, 5% free 16731K/17543K, paused 13ms, total 13ms 01-13 01:22:12.100: I/dalvikvm-heap(24889): Grow heap (frag case) to 21.928MB for 5168972-byte allocation …
我svgandroid
用来PictureDrawable
从SVG原始资源生成s.但是,我似乎无法在这种方式创建的drawable上应用滤色器.
使用PNG的旧代码
icon = getResources().getDrawable(R.drawable.ic_braille);
icon.setColorFilter(0x88880000, Mode.MULTIPLY);
((ImageView)v.findViewById(R.id.icon)).setImageDrawable(icon);
Run Code Online (Sandbox Code Playgroud)
有效,但是
icon = SVGParser.getSVGFromResource(getResources(), R.raw.ic_braille).createPictureDrawable();
icon.setColorFilter(0x88880000, Mode.MULTIPLY);
((ImageView)v.findViewById(R.id.icon)).setImageDrawable(icon);
Run Code Online (Sandbox Code Playgroud)
才不是.我尝试在DrawView上,在ImageView上(在设置drawable之后),通过XML,甚至在Drawable上将其设置为ImageView的drawable之后应用滤色器,对于PNG也可以,但是它们都不适用PictureDrawable.更换setImageDrawable
的setBackgroundDrawable
,被一些人视为建议,不呈现绘制的.我在Androids 1.6,2.3,4.0上运行代码,没有区别.我检查了SVG库的来源,它在任何时候都没有触摸彩色滤镜.我究竟做错了什么?某些种类的抽屉是否无法着色?
我正在尝试使用svg-android来显示我从openstreetmap导出的路线图.
我按照教程中的步骤操作,它与test.svg图形(3KB)配合使用.但导出的地图大小为500KB.当我尝试加载地图时,我得到一个SVGParseException:
System.err: com.larvalabs.svgandroid.SVGParseException: java.lang.NumberFormatException
System.err: at com.larvalabs.svgandroid.SVGParser.parse(Unknown Source)
System.err: at com.larvalabs.svgandroid.SVGParser.getSVGFromResource(Unknown Source)
System.err: at my.package.view.SVGMapView.loadSVGImage(SVGMapView.java:141)
Run Code Online (Sandbox Code Playgroud)
第141行说:
svg = SVGParser.getSVGFromResource(getResources(), R.raw.test);
Run Code Online (Sandbox Code Playgroud)
是否有可能在额外的线程中预加载svg图像,或者是否有更好的解决方案来解决我的问题?
谢谢
我正在制作非常简单的应用程序。它需要显示一个包含广义世界地图的 SVG。通过单击城市名称(svg 矩形),我需要显示与该城市对应的另一个 SVG。此外,所有 SVG 都必须支持缩放和平移。
我设法让 SVG 支持缩放和平移,效果很好。为此,我使用svg-android库来渲染SVG,并使用定制的TouchImageView进行平移、缩放和捕获缩放和触摸事件。但是,在 Android 中的 SVG 上制作可点击区域似乎是不可能的。
我尝试了蛮力,在每次用户交互(触摸或缩放)和每次点击 SVG 时重新计算我感兴趣区域的位置,以检查我的区域(矩形列表)是否包含该点,并执行相应的操作。
这不起作用,因为我无法理解计算规则MotionEvent#getX/Y
和类似方法。也许我可以为固定 SVG 实现这一点,但对于可缩放,我真的不能。
任何提示?这在Android中甚至可能吗?
我在android中使用SVG导入的图像,但我无法使用ImageView调整大小,图像是这样的.
进口的drawable是:
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="208dp"
android:height="208dp"
android:viewportHeight="24.0"
android:viewportWidth="24.0">
<path
android:fillColor="#8A1D3043"
android:pathData="...lines and curves..."/>
</vector>
Run Code Online (Sandbox Code Playgroud)
当我更改ImageView(它所附加的位置)layout_height和layout_width时,我得到了这个:
<ImageView
android:layout_height="100dp"
android:layout_width="100dp"
app:layout_width="@{smallScreen ? @dimen/img_small_screen_size : @dimen/img_big_screen_size}"
app:layout_height="@{smallScreen ? @dimen/img_small_screen_size : @dimen/img_big_screen_size}"
android:layout_gravity="center_horizontal"
android:contentDescription="@{message}"
android:src="@{image}"
android:scaleType="center"
tools:src="@drawable/img_message_private"/>
Run Code Online (Sandbox Code Playgroud)
请注意,向量的高度和宽度都是208dp,但我的ImageView必须用作100dp.必须使用dataBind动态调整View的大小,因此我认为有多个向量不是一个选项.
显然,图像不能与ImageView一起缩放.有人知道为什么以及如何轻松绕过它?