4

I'm having strange issues with 9-patch png's on Android. It already fails in Eclipse visual editor, no matter which target I use (tried several between 7 and 14). The error log shows the message main.xml: Index: 0, Size: 0 The exception behind is:

java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.RangeCheck(ArrayList.java:547)
at java.util.ArrayList.get(ArrayList.java:322)
at com.android.ninepatch.NinePatchChunk.draw(NinePatchChunk.java:185)
at com.android.ninepatch.NinePatchChunk.draw(NinePatchChunk.java:101)
at android.graphics.NinePatch_Delegate$1.draw(NinePatch_Delegate.java:219)
at com.android.layoutlib.bridge.impl.GcSnapshot.drawInLayer(GcSnapshot.java:613)
at com.android.layoutlib.bridge.impl.GcSnapshot.draw(GcSnapshot.java:583)
at android.graphics.NinePatch_Delegate.draw(NinePatch_Delegate.java:217)
at android.graphics.NinePatch_Delegate.nativeDraw(NinePatch_Delegate.java:170)
at android.graphics.NinePatch.nativeDraw(NinePatch.java)
at android.graphics.NinePatch.draw(NinePatch.java:120)
at android.graphics.drawable.NinePatchDrawable.draw(NinePatchDrawable.java:189)
at android.view.View.draw(View.java:10865)
at android.view.ViewGroup.drawChild(ViewGroup.java:2899)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2495)
at android.view.ViewGroup.drawChild(ViewGroup.java:2897)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2495)
at android.view.ViewGroup.drawChild(ViewGroup.java:2897)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2495)
at android.view.View.draw(View.java:10883)
at android.view.ViewGroup.drawChild(ViewGroup.java:2899)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2495)
at android.view.ViewGroup.drawChild(ViewGroup.java:2897)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2495)
at android.view.View.draw(View.java:10883)
at android.view.ViewGroup.drawChild(ViewGroup.java:2899)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2495)
at android.view.View.draw(View.java:10883)
at com.android.layoutlib.bridge.impl.RenderSessionImpl.render(RenderSessionImpl.java:505)
at com.android.layoutlib.bridge.Bridge.createSession(Bridge.java:324)
at com.android.ide.common.rendering.LayoutLibrary.createSession(LayoutLibrary.java:325)
at com.android.ide.eclipse.adt.internal.editors.layout.gle2.RenderService.createRenderSession(RenderService.java:372)
at com.android.ide.eclipse.adt.internal.editors.layout.gle2.GraphicalEditorPart.renderWithBridge(GraphicalEditorPart.java:1323)
at com.android.ide.eclipse.adt.internal.editors.layout.gle2.GraphicalEditorPart.recomputeLayout(GraphicalEditorPart.java:1077)
at com.android.ide.eclipse.adt.internal.editors.layout.gle2.GraphicalEditorPart.activated(GraphicalEditorPart.java:903)
at com.android.ide.eclipse.adt.internal.editors.layout.LayoutEditor.pageChange(LayoutEditor.java:399)
at org.eclipse.ui.part.MultiPageEditorPart$2.widgetSelected(MultiPageEditorPart.java:290)
at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:240)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1282)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1267)
at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1061)
at org.eclipse.swt.custom.CTabFolder.setSelection(CTabFolder.java:2746)
at org.eclipse.swt.custom.CTabFolder.onMouse(CTabFolder.java:1433)
at org.eclipse.swt.custom.CTabFolder$1.handleEvent(CTabFolder.java:257)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3588)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3209)
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2701)
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2665)
at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2499)
at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:679)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:668)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:123)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577)
at org.eclipse.equinox.launcher.Main.run(Main.java:1410)
at org.eclipse.equinox.launcher.Main.main(Main.java:1386)

The 9-patch was created with the draw9patch-tool included in the SDK. I have this issues with all the images I use in this project. I already used 9-patch before in other projects without problems and thus assume there's something specific to the format of my current png's. Maybe the used Photoshop of the designer creates png's which result in invalid 9-patches. Does anybody have an idea what's the issue here?

update:

working version:

enter image description here

not working version:

enter image description here

4

4 回答 4

10

您只是错过了设置的内容区域。

在您的 9 补丁 png 的右侧和底部绘制边框。在此处输入图像描述

于 2012-12-20T03:20:38.303 回答
2

如果您仅在其中一个文件夹中添加了 9Patch 图像,drawable-xhdpi那么它会重现此类错误,您应该将其放在drawable文件夹中或所有文件夹中,例如drawable-hdpi,drawable-mdpi,drawable-xhdpi,drawable-xxhdpi, etc

于 2014-07-28T12:50:51.243 回答
1

似乎已在 SDK 16 / 17 中修复,请参见此处:

http://code.google.com/p/android/issues/detail?id=39814

和这里:

http://code.google.com/p/android/issues/detail?id=37472

于 2013-03-05T09:08:10.483 回答
0

看起来这里的问题是:不工作的版本错过了 2 px 透明边框。然而仍然很奇怪,draw9patch 并没有抱怨这一点并且显示正在工作。

于 2012-06-05T19:40:00.003 回答