大佬教程收集整理的这篇文章主要介绍了android – 如何完全覆盖9-PATCH-PNG?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
删除9-Patch-Information不是一个好的解决方案.
在这里你可以看到我的按钮.蓝色背景是9 PATCH PNG.按钮周围的细线是不需要的.
<?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://scheR_48_11845@as.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>
在每个边框上将图层的偏移设置为“-1”无效.你有什么建议吗?
更新
<!-- To avoid scaling,the following example uses a <bitmap> element with centered gravity: --> <item> <bitmap android:src="@drawable/image" android:gravity="center" /> </item>
我的版本(还有9-patch-png的可伸展区域未被发现):
<?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://scheR_48_11845@as.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>
更新2
这对我有用吗? Making Overlaid image transparent on touch in Android?
但是,快速阅读代码意味着它实际上使用了所有项目填充的总和,这意味着使用默认的LayerDrawable无法消除您的问题.该语句暗示了解决方案:实现LayerDrawable的子类,它覆盖“getPadding”以返回{0,0}.您可能必须在代码中初始化子类,而不是通过加载XML布局,但这并不是特别困难.
[/没关系]
更新:
上面的解决方案不起作用,因为问题不在于填充本身,而是默认实现将每个图像的边界设置为前面图像的填充之和.换句话说,它强制执行嵌套,这是大多数人想要的.正确的解决方案仍然是覆盖LayerDrawable,但你改为替换“onBoundsChange”.完整的,经过测试的演示如下:
package com.beekeeper.ninepatchcover; import android.app.Activity; import android.graphics.*; import android.graphics.drawable.*; import android.os.bundle; import android.view.Gravity; import android.widget.ImageButton; public class NinePatchCover extends Activity { private Drawable mCover0; private Drawable mCover1; /** Called when the activity is first created. */ @Override public void onCreate(final Bundle savedInstanceStatE) { super.onCreate(savedInstanceStatE); setContentView(R.layout.main); final Drawable button = getresources().getDrawable(android.R.drawable.btn_default); final Bitmap iconBitmap = BitmapFactory.decoderesource(getresources(),android.R.drawable.ic_menu_myLOCATIOn); final BitmapDrawable icon = new BitmapDrawable(iconBitmap); icon.setGravity(Gravity.CENTER); mCover0 = getresources().getDrawable(android.R.drawable.title_bar); mCover1 = getresources().getDrawable(android.R.drawable.title_bar); final LayerDrawable unsolved = new LayerDrawable(new Drawable[]{Button,icon,mCover0}); final LayerDrawable solved = new MyLayerDrawable(new Drawable[]{Button,mCover1,},mCover1); ((ImageButton)findViewById(R.id.uncovered)).setBACkgroundDrawable(unsolved); ((ImageButton)findViewById(R.id.covered)).setBACkgroundDrawable(solved); } class MyLayerDrawable extends LayerDrawable { Drawable mCover; public MyLayerDrawable(final Drawable[] layers,final Drawable cover) { super(layers); mCover = cover; } @Override protected void onBoundsChange(final Rect bounds) { super.onBoundsChange(bounds); mCover.setBounds(bounds); } } }
使用以下layout / main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://scheR_48_11845@as.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <ImageButton android:id="@+id/uncovered" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <ImageButton android:id="@+id/covered" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout>
示例屏幕截图如下:
更新2:
根据要求,以下是如何修改它以在代码中初始化选择器.用以下代码替换“mCover1”的初始化:
final StateListDrawable sld = new StateListDrawable(); sld.addState(new int[]{android.R.attr.state_presseD},new ColorDrawable(0xffff0000)); sld.addState(new int[]{android.R.attr.state_window_focuseD},new ColorDrawable(0xff00ff00)); sld.addState(new int[]{},getresources().getDrawable(android.R.drawable.title_bar)); mCover1 = sld;
这将在正常情况下显示绿色,其中窗口聚焦但未按下按钮,按下按钮时为红色,窗口未聚焦时为默认可绘制(灰色). (尝试向下拖动“windowshade”通知栏以查看窗口处于未聚焦状态.)
以上是大佬教程为你收集整理的android – 如何完全覆盖9-PATCH-PNG?全部内容,希望文章能够帮你解决android – 如何完全覆盖9-PATCH-PNG?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。