2015-08-16 93 views
1

我试图把启动图像4.41 KB,我和我的三星S4设备制造到我的应用程序,但我得到下面的时候我的错误将它存储在这个目录下drawable-hdpi。我甚至试图将它存储在ldpi,mdpi,xhdpi和xxhdpi中,在这种情况下,我得到的是没有图像的白色背景。android.view.InflateException:二进制XML文件行#3:错误充气类<unknown>

我从具有800×600像素大小和494 KB互联网上下载的图像。我把它放在drawable-hdpi目录中,它工作正常(图像显示为飞溅),但我想把我自己的S4设备图像作为背景。我该如何解决它?

XML文件:

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:background= "@drawable/splash_background" 
    > 

</LinearLayout> 

错误:

08-02 12:24:01.781: E/AndroidRuntime(15857): FATAL EXCEPTION: main 
08-02 12:24:01.781: E/AndroidRuntime(15857): Process: com.bustracker, PID: 15857 
08-02 12:24:01.781: E/AndroidRuntime(15857): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.bustracker/com.bustracker.Splash}: android.view.InflateException: Binary XML file line #3: Error inflating class <unknown> 
08-02 12:24:01.781: E/AndroidRuntime(15857): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2693) 
08-02 12:24:01.781: E/AndroidRuntime(15857): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2760) 
08-02 12:24:01.781: E/AndroidRuntime(15857): at android.app.ActivityThread.access$900(ActivityThread.java:177) 
08-02 12:24:01.781: E/AndroidRuntime(15857): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1448) 
08-02 12:24:01.781: E/AndroidRuntime(15857): at android.os.Handler.dispatchMessage(Handler.java:102) 
08-02 12:24:01.781: E/AndroidRuntime(15857): at android.os.Looper.loop(Looper.java:145) 
08-02 12:24:01.781: E/AndroidRuntime(15857): at android.app.ActivityThread.main(ActivityThread.java:5944) 
08-02 12:24:01.781: E/AndroidRuntime(15857): at java.lang.reflect.Method.invoke(Native Method) 
08-02 12:24:01.781: E/AndroidRuntime(15857): at java.lang.reflect.Method.invoke(Method.java:372) 
08-02 12:24:01.781: E/AndroidRuntime(15857): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1389) 
08-02 12:24:01.781: E/AndroidRuntime(15857): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1184) 
08-02 12:24:01.781: E/AndroidRuntime(15857): Caused by: android.view.InflateException: Binary XML file line #3: Error inflating class <unknown> 
08-02 12:24:01.781: E/AndroidRuntime(15857): at android.view.LayoutInflater.createView(LayoutInflater.java:640) 
08-02 12:24:01.781: E/AndroidRuntime(15857): at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:55) 
08-02 12:24:01.781: E/AndroidRuntime(15857): at android.view.LayoutInflater.onCreateView(LayoutInflater.java:689) 
08-02 12:24:01.781: E/AndroidRuntime(15857): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:748) 
08-02 12:24:01.781: E/AndroidRuntime(15857): at android.view.LayoutInflater.inflate(LayoutInflater.java:483) 
08-02 12:24:01.781: E/AndroidRuntime(15857): at android.view.LayoutInflater.inflate(LayoutInflater.java:415) 
08-02 12:24:01.781: E/AndroidRuntime(15857): at android.view.LayoutInflater.inflate(LayoutInflater.java:366) 
08-02 12:24:01.781: E/AndroidRuntime(15857): at android.support.v7.app.ActionBarActivityDelegateBase.setContentView(ActionBarActivityDelegateBase.java:228) 
08-02 12:24:01.781: E/AndroidRuntime(15857): at android.support.v7.app.ActionBarActivity.setContentView(ActionBarActivity.java:102) 
08-02 12:24:01.781: E/AndroidRuntime(15857): at com.bustracker.Splash.onCreate(Splash.java:13) 
08-02 12:24:01.781: E/AndroidRuntime(15857): at android.app.Activity.performCreate(Activity.java:6289) 
08-02 12:24:01.781: E/AndroidRuntime(15857): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119) 
08-02 12:24:01.781: E/AndroidRuntime(15857): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2646) 
08-02 12:24:01.781: E/AndroidRuntime(15857): ... 10 more 
08-02 12:24:01.781: E/AndroidRuntime(15857): Caused by: java.lang.reflect.InvocationTargetException 
08-02 12:24:01.781: E/AndroidRuntime(15857): at java.lang.reflect.Constructor.newInstance(Native Method) 
08-02 12:24:01.781: E/AndroidRuntime(15857): at java.lang.reflect.Constructor.newInstance(Constructor.java:288) 
08-02 12:24:01.781: E/AndroidRuntime(15857): at android.view.LayoutInflater.createView(LayoutInflater.java:614) 
08-02 12:24:01.781: E/AndroidRuntime(15857): ... 22 more 
08-02 12:24:01.781: E/AndroidRuntime(15857): Caused by: java.lang.OutOfMemoryError: Failed to allocate a 153363468 byte allocation with 8388608 free bytes and 112MB until OOM 
08-02 12:24:01.781: E/AndroidRuntime(15857): at dalvik.system.VMRuntime.newNonMovableArray(Native Method) 
08-02 12:24:01.781: E/AndroidRuntime(15857): at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method) 
08-02 12:24:01.781: E/AndroidRuntime(15857): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:726) 
08-02 12:24:01.781: E/AndroidRuntime(15857): at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:547) 
08-02 12:24:01.781: E/AndroidRuntime(15857): at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:1014) 
08-02 12:24:01.781: E/AndroidRuntime(15857): at android.content.res.Resources.loadDrawableForCookie(Resources.java:3730) 
08-02 12:24:01.781: E/AndroidRuntime(15857): at android.content.res.Resources.loadDrawable(Resources.java:3603) 
08-02 12:24:01.781: E/AndroidRuntime(15857): at android.content.res.TypedArray.getDrawable(TypedArray.java:762) 
08-02 12:24:01.781: E/AndroidRuntime(15857): at android.view.View.<init>(View.java:3970) 
08-02 12:24:01.781: E/AndroidRuntime(15857): at android.view.ViewGroup.<init>(ViewGroup.java:507) 
08-02 12:24:01.781: E/AndroidRuntime(15857): at android.widget.LinearLayout.<init>(LinearLayout.java:199) 
08-02 12:24:01.781: E/AndroidRuntime(15857): at android.widget.LinearLayout.<init>(LinearLayout.java:195) 
08-02 12:24:01.781: E/AndroidRuntime(15857): at android.widget.LinearLayout.<init>(LinearLayout.java:191) 
08-02 12:24:01.781: E/AndroidRuntime(15857): ... 25 more 

回答

1

你正试图把可能有一个高分辨率的图像。这似乎是OutOfMemoryError的主要原因。

您可以使用Android资产Studio为各种屏幕密度的图像。 https://stackoverflow.com/questions/10754523/is-there-any-tool-which-can-a-resize-png-image-into-a-image-for-ldpi-mdpi-hdp

+0

我已经抽放看看这个工具。你知道哪些选项(ICON GENERATORS,OTHER GENERATORS或COMMUNITY TOOLS)可以用来使用此工具创建背景闪屏图像吗? – MrPencil

+0

你可以使用简单的9-patch生成器。在上面的链接中,对于通用图像(除了图标)提到了各种其他工具/链接/方式。我还没有尝试https://github.com/asystat/Final-Android-Resizer,但你可以试试看。 –

1

如果你想避免OutOfMemoryError,你可以做一件棘手的事情。

转到您的AppManifest.xml,并在应用程序代码,补充一点:

android:largeHeap="true"

这段代码会尽量避免您从OutOfMemoryError异常。它增加了您的应用程序优先级当任何用户打开了许多应用程序时,这将尝试从其他应用程序中清除一些内存,为应用程序腾出更多空间。但仍尝试缩小图像的文件大小,因为这样做肯定会更好。检查这个链接。我总是使用该工具:http://www.compresspng.com

还要确保你已经在你的AppManifest.xml中注册了你的新活动。即使是最好的开发者有时也会忘记这么做。

如果你仍然面临的OutOfMemoryError然后尝试做像什么Amey Shirke说。

+0

我认为这是更好的http://way2enjoy.com/compress-png,因为它允许在一个机会50个文件。如果你知道更好,那么请分享链接。 – Steeve

相关问题