为什么我的SVG图像不会显示在我的Galaxy Nexus上?(Why won't my SVG image display on my Galaxy Nexus?)

编程入门 行业动态 更新时间:2024-10-26 04:23:48
为什么我的SVG图像不会显示在我的Galaxy Nexus上?(Why won't my SVG image display on my Galaxy Nexus?)

我正在尝试使用svg-android库让一个图像成为另一个图像的背景。 当我在Samsung Galaxy Nexus(4.3,Sprint)上查看图像时,不显示背景图像。 当我在模拟器上查看它时,它是正确的。 我甚至删除了前景,这保持不变。 这是XML布局的关键部分:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" > <com.kd7uiy.hamfinder.SvgView android:id="@+id/svgImage" android:src="@raw/paper" android:layout_alignLeft="@+id/scroll" android:layout_alignRight="@id/scroll" android:layout_alignTop="@id/scroll" android:layout_above="@+id/buttons" android:layout_width="match_parent" android:layout_height="match_parent" /> <ScrollView android:id="@+id/scroll" android:scrollbars="none" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_above="@+id/buttons" android:layout_alignParentLeft="true" android:layout_alignParentRight="true" android:background="@android:color/transparent" android:layout_below="@id/adView"> <TableLayout android:id="@+id/tableView" android:layout_width="match_parent" android:layout_height="wrap_content" android:shrinkColumns="1" android:stretchColumns="1" /> </ScrollView> </RelativeLayout>

和自定义类。 注意我从svg-android尝试了一个没有运气的提示:

public class SvgView extends View { Picture picture; long startTime; float scaleFactor; public SvgView(Context context,AttributeSet attrs) { super(context,attrs); setImage(attrs.getAttributeResourceValue("http://schemas.android.com/apk/res/android","src", 0)); if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) { disableHardwareAcceleration(); } } @TargetApi(Build.VERSION_CODES.HONEYCOMB) private void disableHardwareAcceleration() { setLayerType(View.LAYER_TYPE_SOFTWARE, null); } public SvgView(Context context) { super(context); } public void setImage(int img_resource) { // Parse the SVG file from the resource SVG svg = SVGParser.getSVGFromResource(getResources(),img_resource); picture = svg.getPicture(); } public void onDraw(Canvas canvas) { if (picture!=null) { scaleFactor=Math.min((float)getHeight()/picture.getHeight(),(float)getWidth()/picture.getWidth()); canvas.scale((float)scaleFactor,(float)scaleFactor); canvas.drawPicture(picture); } } }

最后,这是来自我的Galaxy Nexus和模拟器的图像。 注意背景的差异。

I'm trying to have one image be a background for another, using the svg-android library. When I view the image on my Samsung Galaxy Nexus (4.3, Sprint), the background image doesn't display. When I view it on the emulator, it's there correctly. I've even removed the foreground, and this stays the same. Here's the key parts of the XML layout:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" > <com.kd7uiy.hamfinder.SvgView android:id="@+id/svgImage" android:src="@raw/paper" android:layout_alignLeft="@+id/scroll" android:layout_alignRight="@id/scroll" android:layout_alignTop="@id/scroll" android:layout_above="@+id/buttons" android:layout_width="match_parent" android:layout_height="match_parent" /> <ScrollView android:id="@+id/scroll" android:scrollbars="none" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_above="@+id/buttons" android:layout_alignParentLeft="true" android:layout_alignParentRight="true" android:background="@android:color/transparent" android:layout_below="@id/adView"> <TableLayout android:id="@+id/tableView" android:layout_width="match_parent" android:layout_height="wrap_content" android:shrinkColumns="1" android:stretchColumns="1" /> </ScrollView> </RelativeLayout>

And the custom class. Note I tried a tip from svg-android without luck:

public class SvgView extends View { Picture picture; long startTime; float scaleFactor; public SvgView(Context context,AttributeSet attrs) { super(context,attrs); setImage(attrs.getAttributeResourceValue("http://schemas.android.com/apk/res/android","src", 0)); if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) { disableHardwareAcceleration(); } } @TargetApi(Build.VERSION_CODES.HONEYCOMB) private void disableHardwareAcceleration() { setLayerType(View.LAYER_TYPE_SOFTWARE, null); } public SvgView(Context context) { super(context); } public void setImage(int img_resource) { // Parse the SVG file from the resource SVG svg = SVGParser.getSVGFromResource(getResources(),img_resource); picture = svg.getPicture(); } public void onDraw(Canvas canvas) { if (picture!=null) { scaleFactor=Math.min((float)getHeight()/picture.getHeight(),(float)getWidth()/picture.getWidth()); canvas.scale((float)scaleFactor,(float)scaleFactor); canvas.drawPicture(picture); } } }

Lastly, here's the image from my Galaxy Nexus, and the emulator. Note the difference in the background.

最满意答案

事实证明提供的提示是正确的方向,但我有一个小错字。 硬件加速似乎是罪魁祸首。 由于我没有任何复杂的东西,禁用它就好了。 我几乎有正确的解决方案,只是有错误的比较器。 更改代码如下修复它:

public SvgView(Context context,AttributeSet attrs) { super(context,attrs); setImage(attrs.getAttributeResourceValue("http://schemas.android.com/apk/res/android","src", 0)); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { disableHardwareAcceleration(); } }

It turns out the provided tip was in the right direction, but I had a small typo. The hardware acceleration seems to be the culprit. As I don't have anything that complex, disabling it is just fine. I almost had the right solution, just had the wrong comparitor. Changing the code as follows fixes it:

public SvgView(Context context,AttributeSet attrs) { super(context,attrs); setImage(attrs.getAttributeResourceValue("http://schemas.android.com/apk/res/android","src", 0)); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { disableHardwareAcceleration(); } }

更多推荐

本文发布于:2023-04-28 01:02:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1329212.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:图像   Galaxy   SVG   display   image

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!