我尝试通过在按钮背景和按钮图标上放置一个半透明的PNG文件来实现悬停效果(按下按钮时的效果).不幸的是,按钮背景文件是一个9-PATCH-PNG,它在这里引起了一些麻烦:它"吞下"其层顶部的所有东西,并且不允许覆盖九个补丁-png的可伸展区域(细线周围) .换句话说,9 PATCH PNG的顶部和左边缘的黑线不仅导致拉伸,还导致填充行为.
删除9-Patch-Information不是一个好的解决方案.
在这里你可以看到我的按钮.蓝色背景是9 PATCH PNG.按钮周围的细线是不需要的.

此图层列表分配给按钮属性"background":
<?xml version="1.0" encoding="utf-8"?>
<layer-list
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:drawable="@drawable/home_btn_bg_blue_without_padding" />
<item>
<bitmap
android:src="@drawable/home_icon_test"
android:gravity="center" />
</item>
<item
android:drawable="@drawable/layer_black_50" />
</layer-list>
Run Code Online (Sandbox Code Playgroud)
在每个边框上将图层的偏移设置为"-1"无效.你有什么建议吗?
更新
我尝试了跟随,这将避免缩放,从这里建议.但也没有工作:
<!-- To avoid scaling, the following example uses a <bitmap> element with centered gravity: -->
<item>
<bitmap android:src="@drawable/image"
android:gravity="center" />
</item>
Run Code Online (Sandbox Code Playgroud)
我的版本(还有9-patch-png的可伸展区域未被发现):

<?xml version="1.0" encoding="utf-8"?>
<layer-list
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:drawable="@drawable/home_btn_bg_blue_hover_without_padding" />
<item>
<bitmap
android:src="@drawable/home_icon_test"
android:gravity="center" />
</item>
<item>
<bitmap android:src="@drawable/layer_black_100"
android:height="100dp"
android:width="100dp"/></item>
</layer-list>
Run Code Online (Sandbox Code Playgroud)
更新2
这对我有用吗?在Android上触摸覆盖图像是否透明?
我刚刚了解了Android九补丁的想法,这是一个非常好的主意.我的问题是,如果它是一个Android模式,或者有其他平台的实现,可能有不同的命名.
谢谢!
我需要用这个背景做一个容器: 
背景必须在这个形状内重复(具有圆角顶部的矩形).
因为这是我知道不可能用9patch执行的,我已经研究过形状,但是在这里,似乎不可能得到我想要的东西......
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners
android:topRightRadius="20dp"
android:topLeftRadius="10dp"
android:bottomLeftRadius="0dp"
android:bottomRightRadius="0dp"/>
<solid
android:color="@color/red"/>
</shape>
Run Code Online (Sandbox Code Playgroud)
我无法将形状链接到我的:
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/point1sur4"
android:tileMode="repeat" />
Run Code Online (Sandbox Code Playgroud)
而且,我的形状有四个圆角....
希望你能帮忙!Thx,Renaud
当使用9补丁图像作为背景时,填充似乎总是来自9补丁图像.即使你没有在9补丁图像中使用填充条,它也使用了drawable.
如果未包含填充线,Android将使用左侧和顶部线来定义此可绘制区域.
http://developer.android.com/guide/topics/graphics/2d-graphics.html#nine-patch
但是,您可以使用android:padding = 0dp或= Xdp在XML中覆盖它.不幸的是使用android:paddingLeft = Xdp不起作用.所以你坚持使用统一填充.我试过这样做:
android:padding="2dp"
android:paddingLeft="20dp"
Run Code Online (Sandbox Code Playgroud)
它对左边的填充没有影响.将它们放在styles.xml中会产生类似的结果.
我见过的唯一一个解决方法就是在代码中设置填充.
我想知道为什么我们使用九补丁?我知道缩小或拉伸图像,但如果我想调整图像大小,我们不能在像gimp这样的专用图像编辑器上进行调整吗?
我想创建一个Android选项卡视图,看起来像这个图像:

我想罗马有很多方法,但我想我还没找到理想的方法.我的想法是剪掉一个分隔线和一个活动的分隔线,并将它们放在按钮之间.但是,我不知道这是否是一个很好的解决方案,因为我仍然需要为第一个和最后一个按钮设置不同的样式.我已经为周围(灰色)容器准备了9个补丁.
我还想过为红条制作一个红色的9补丁,而不仅仅是选择按钮的样式.这个解决方案的问题是我仍然需要根据按钮的数量放置顶部对角白线.
有没有人对我有更好的解决方案?
我在应用程序视图中使用了大量的NinePatchDrawables.底层位图是缓存的,因此没有内存问题.
在准备/绘制屏幕时,应用程序崩溃并显示以下日志条目:
04-03 19:37:42.651: A/libc(4064): Fatal signal 11 (SIGSEGV), code 2, fault addr 0x9e985ff8 in tid 4093 (RenderThread)
Run Code Online (Sandbox Code Playgroud)
这个问题刚刚出现了最新的Android 5.1版本(LMY47D,LMY47E,LMY47I).具有相同图形的相同视图在早期的Android版本5.0.2(LRX22C)上运行良好.我在Nexus 6上遇到问题,到目前为止我还没有机会在任何其他设备上测试它.
只有在使用大量NinePatchDrawables时才会发生崩溃,尤其是在将它们叠加在一起时.当我加载与普通png完全相同的图形(仅用于测试)时,它可以正常工作.使用较少量的NinePatchDrawables的其他视图也可以正常工作.
早期的Android版本(5.0.2或更早版本)也存在同样的问题,但每个屏幕至少发生了三到四倍的NinePatchDrawable.
04-03 19:37:42.651: A/libc(4064): Fatal signal 11 (SIGSEGV), code 2, fault addr 0x9e985ff8 in tid 4093 (RenderThread)
04-03 19:37:42.752: I/DEBUG(354): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
04-03 19:37:42.752: I/DEBUG(354): Build fingerprint: 'google/shamu/shamu:5.1/LMY47D/1743759:user/release-keys'
04-03 19:37:42.752: I/DEBUG(354): Revision: '33696'
04-03 19:37:42.752: I/DEBUG(354): ABI: 'arm'
04-03 19:37:42.752: I/DEBUG(354): pid: 4064, tid: …Run Code Online (Sandbox Code Playgroud) 我有一个活动,在HorizontalScrollView中定义了ImageView.图像源是一个9补丁文件,仅限于拉伸右边缘以填充屏幕.我已经实现了一个简单的缩放功能,允许用户通过调整位图大小并将新位图分配给视图来双击放大和缩小.我目前的问题是,当双击点击以缩小时,当我将新的已调整大小的位图分配给视图时,不会应用9补丁.换句话说,它不是像9补丁文件中那样只拉伸右边缘,而是拉伸整个图像.
这是我的XML:
<HorizontalScrollView
android:id="@+id/hScroll"
android:fillViewport="true"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:fadingEdge="none" >
<RelativeLayout
android:id="@+id/rlayoutScrollMap"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<ImageView
android:id="@+id/imgResultMap"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scaleType="fitXY"
android:src="@drawable/map_base"/>
</RelativeLayout>
</horizontalScrollView>
Run Code Online (Sandbox Code Playgroud)
这是我的代码的相关部分,在onDoubleTap()调用中:
public boolean onDoubleTap(MotionEvent e)
{
if (zoom == 1) {
zoom = 2; // zoom out
} else {
zoom = 1; // zoom in
}
Bitmap image = BitmapFactory.decodeResource(getResources(),R.drawable.map_base);
Bitmap bmp = Bitmap.createScaledBitmap(image, image.getWidth() * zoom, image.getHeight() * zoom, false);
ImageView imgResultMap = (ImageView)findViewById(R.id.imgResultMap);
imgResultMap.setImageBitmap(bmp);
return false;
}
Run Code Online (Sandbox Code Playgroud)
编辑:经过一些研究,我发现它.我不仅要操纵位图,还需要包含不是位图图像一部分的9补丁块,以重新构建一个新的9补丁drawable.请参阅以下示例代码:
...
else {
// Zoom out …Run Code Online (Sandbox Code Playgroud) android android-widget nine-patch android-layout android-imageview
我有一个TransitionDrawable.这两个状态都是9个补丁并且定义了内容区域.问题是利润率太高 - 实际上它基本上是应有的两倍.似乎它增加了两个九个补丁的边缘.
如果我将这九个补丁中的一个直接设置为背景并且不使用TransitionDrawable,那么边距可以正常工作,因此九个补丁肯定是正确的.
有没有人遇到这样的问题?
编辑:如果我将内容区域设置为资产的完整大小,并在xml中定义填充,它的工作原理.相反,它总是会让保证金错误.这似乎是Android中的一个错误,所以这似乎是唯一的解决方案,但也许有一个更好的解决方法:/
android nine-patch android-ui android-layout transitiondrawable
我正在创建一个聊天应用程序.我希望将我的png图像转换为9patch图像.我使用此链接.... http://android-ui-utils.googlecode.com/hg/asset-studio /dist/nine-patches.html
但问题是聊天气泡总是保持最小宽度,即使对于小消息也是如此.例如,如果我输入类似"hello"的文本,它会显示在宽度大于消息的气泡中.如何创建9patch形象好吗?
这是我的png图像

android ×10
nine-patch ×10
android-ui ×1
image ×1
layer ×1
padding ×1
resize ×1
shape ×1
tabs ×1