标签: nine-patch

Android:制作/显示9patch图像时的对齐错误

NinePatch:

垃圾桶图标NinePatch图像

截图:

NinePatch错位的屏幕截图

布局XML:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:background="#ffffff">

    <LinearLayout
        android:id="@+id/edit_tray"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true">

        <View
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/trash"/>

    </LinearLayout>

</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

期望的结果:

"edit_tray"表示可以切换的UI元素.当编辑模式关闭时,"edit_tray"(以及垃圾桶图标)"消失".当编辑模式打开时,"edit_tray"可见并覆盖在ScrollView内容上.

垃圾桶图标有两个元素:图标本身及其背后的线性渐变.NinePatch图像包含三个可伸展区域和一个静态区域以容纳这些元素.图形中间的垃圾桶图标是静态的,应直接显示在屏幕的水平中心和底部.渐变应该从屏幕的底部延伸到另一侧.

错误?

NinePatch图像水平地仅包含图像两侧的可伸展区域的一个像素.其效果应该是垃圾桶图标直接出现在中心(左侧1个像素=右侧1个像素).但是,正如您在上面的屏幕截图中看到的那样情况并非如此.注意:此截图来自我的测试手机,即T-Mobile G2.在仿真器中可以看到相同的效果.但是,在draw9patch预览和eclipse图形布局视图中,图像是完美分布的.

我已经尝试了几种不同的方法来尝试找出错误的位置,并尝试修复它或解决它.包括:使用ImageViews代替Views(效果相同),使用android:scaleType ="fitXY"(同一问题),在运行时检查屏幕的宽度和"edit_tray"的宽度是否相同(它们是),使用两个不同的图像作为渐变(如edit_tray背景)和图标(作为ImageView src)(创建另一个问题,其中两个图像没有相互重叠.通过在两者上设置绝对高度固定)等.

答案,解决方法和真实问题

我使用一些简单的NinePatch图像进行了一些测试,每侧最多有六个可伸缩区域.我注意到至少有一个测试用例(手机,模拟器,draw9patch,eclipse中的Graphical Layout)显示了一些问题.

我决定尝试水平扩展图像,以便在垃圾桶图标的边缘显示更多的线性渐变.我将图像设为128x64(之前为64x64).我制作了更多可拉伸部分的边缘部分,以试图控制发生在图像上的任何不良数学(?).Draw9patch报告了坏的部分,所以我把它放回到两个像素,两边一个像素.有效!图标直接位于屏幕中央!我不知道为什么,但是如果不改变图像的实际可伸缩部分,只将图像的宽度改为128,它就可以了.

我尝试将图像重新调整为大约100px宽,以删除一些冗余像素,错误又回来了!它不仅会返回,而且图标被放置在与屏幕中心偏移的完全相同的位置.我无法弄清楚为什么会这样发生.

有人有主意吗?这是一个错误吗?

鉴于我上面描述的解决方法,我目前正在进行此工作,但如果有人有任何建议我正在听.

android nine-patch android-layout

15
推荐指数
1
解决办法
1628
查看次数

Android - 无法打开内容:file:/// storage/emulated/0

我有一个九个补丁图像背景的小部件.图像保存在/ sdcard/mydir/bgs中.

当我尝试使用setImageViewUri方法加载图像时,我遇到了以下错误:

Unable to open content: file:///storage/emulated/0/sdcard/mydir/bgs
Run Code Online (Sandbox Code Playgroud)

..

然后

...

open failed: EACCES (Permission denied)
Run Code Online (Sandbox Code Playgroud)

这只出现在主屏幕上,只有Nexus 10和Nexus 7(最新的启动器4.4不存在此错误).我的应用程序上也有一些RemoteView,一切正常.

我还在清单中添加了READ_EXTERNAL_STORAGE,WRITE_EXTERNAL_STORAGE.

我怎么解决?

更新:我检查方法setImageViewUri,我发现它改变了我的文件的路径.

if (value != null) {
            // Resolve any filesystem path before sending remotely
            value = value.getCanonicalUri();
            if (StrictMode.vmFileUriExposureEnabled()) {
                value.checkFileUriExposed("RemoteViews.setUri()");
            }
        }
Run Code Online (Sandbox Code Playgroud)

此方法接收我的值(/ sdcard/mydir/bgs)并将其更改为(storage/emulated/0/sdcard/mydir/bgs).但是这个文件不是通过adb存在于系统中的.

android widget nine-patch

15
推荐指数
3
解决办法
8万
查看次数

9-Patch可绘制尺寸Android.不同密度如何处理未拉伸区域?

在此输入图像描述

考虑上面的图像. - 虚线划分了9-Patch png,我将从photoshop文件中切出.我需要它来创建一个弹出框. - 该盒子包含一个dropShadow,如本照片中的测量工具所示. - 粉色线条用于显示我将如何使用draw9Patch工具创建9-Patch.

我的问题是:如果我有一个带有9-Patch的View"Container"作为背景我需要确保它的子视图总是在白框内.我打算用这个填充.我打算将填充设置为与测量工具相等.因此,如果它在photoshop中为30px,我会layout_paddingLeft"=30dp"为容器设置.(设计是在MDPI,所以我假设这个转换是可以的).但是,不同密度的屏幕如何处理9路径.例如,测量面积是30px还是30dip

android drawable nine-patch

14
推荐指数
1
解决办法
4786
查看次数

Android NinePatch .png文件格式?

Android NinePatch图像似乎是带有额外信息的标准.png文件.是否有任何格式的规范,因为我希望能够在其他平台上实现这一点?

android file-format nine-patch

13
推荐指数
3
解决办法
1万
查看次数

Android的Phonegap启动画面:未拉伸或9patch

当我的phonegap应用程序启动时,我会弹出一个假的闪屏:

super.setIntegerProperty("splashscreen", R.drawable.splash);
super.loadUrl("file:///android_asset/www/index.html", 500);
Run Code Online (Sandbox Code Playgroud)

我目前有3个不同的splash.png文件:hdpi,mdpdi和ldpi.我的问题是即使在hdpi中,你也会得到480 x 800的设备和480 x 854的其他设备,并且android会拉伸我的启动图像来填充屏幕.

我宁愿让图像保持其纵横比.据我所知,9补丁解决方案不适用于PhoneGap.如果愿意,请告诉我如何!我准备好了.9.png了.所以我能想到的其他解决方案是防止android扩展我的图像.我该怎么办?

谢谢!

screen splash-screen stretch nine-patch cordova

13
推荐指数
2
解决办法
1万
查看次数

在运行时构建9个可绘制的补丁

我使用Brian Griffey提供的优秀要点(在此处找到),在Android 3.0+上成功构建了一个9patch drawable .

基本上我从网络加载原始(无补丁)图形文件,文件名包含我需要使用的上限,以便相应地缩放图像.然后我使用这些值与上面找到的类,并应用该图像作为背景的各种元件(如TextView,ImageButton,Button,ViewGroup,等等).

这可以完美地工作,你可以在这里看到:

Android 3.0+结果

但是,在Android 2.3.x上运行相同的代码会产生结果:

Android 2.x结果

我查看了Android中使用的源代码来解析9patch图像(此处此处),但没有找到使其正常工作的方法.我已经尝试了几乎所有我可以抛出的东西都无济于事.

为了记录,9patch由每个轴上的三列组成,一个固定,一个可伸缩,一个固定.

这里希望别人之前解决过这个问题.

提前致谢.

编辑我只对在Android 2.3及更高版本上复制此行为感兴趣(我最初有2.x).

编辑#2这个要点准确描述了我正在尝试做的事情 +源图像:源图像

编辑#3图像的大小为22px/58px(宽度/高度),插图为14/6/14/6(上/左/下/右).

graphics android bytearray nine-patch android-drawable

13
推荐指数
2
解决办法
4855
查看次数

NinePatch Images的中心资源?

从创建的NinePatches网中是否有任何中心位置或集合?

我认为它们是真正的花哨和有用的东西.即使您不是设计师,这也可以为您带来巨大的利益和外观.但我认为,如果因为它们可用于图标而在互联网上有一些这样的收藏品会很棒.但我没有发现任何有用的东西.所以我问你是否知道这样的地点或网页?

resources user-interface android nine-patch

12
推荐指数
2
解决办法
1万
查看次数

拉伸像android九补丁的图像?

UIImage 方法 :

- (UIImage *)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:(NSInteger)topCapHeight.

这里,可伸展区域被强制为高/宽的单个像素.

我无法设置可伸缩区域,所以我想知道:是否有UIImage类别可以做到这一点?

用谷歌搜索后,我找到了一个lib.

问题: iPhone有九个补丁装载程序吗?

公告: http ://blog.tortuga22.com/2010/05/31/announcing-tortuga-22-ninepatch/

http://i.stack.imgur.com/Rc6my.png

这是一张源图片,我想要拉伸内部的灰色矩形.

提前致谢.

iphone objective-c nine-patch ipad ios

12
推荐指数
2
解决办法
1万
查看次数

寻找9补丁图形创建工具

draw9patch似乎非常不方便.如果图像很大,则需要大约5分钟来绘制所有必需的纯黑线.很难相信来自Google的高度专业的开发人员已经创建了类似这个工具的东西.

还有更好的应用吗?或者我做错了什么?

android nine-patch

12
推荐指数
3
解决办法
2万
查看次数

在Android Switch组件上定义自定义样式(主题)

我是Android开发的新手,也是Android主题/定制的新手,看起来是一个广泛的主题......

我正在尝试给我的Switch组件一个特殊的外观和感觉,但我无法实现我想要的东西,avan在互联网上查找了很多资源.

这真让我抓狂!!
在此先感谢您的帮助,Android大师!

上下文

我在一个现有的android应用程序(v1)上工作,它是minSdkVersion ="8".

因此,应用程序使用第三方库来获取操作栏(ActionBar Sherlock)和开关(SwitchCompatLibrary):

今天,我们正在制作v2版本,minSdkVersion ="14".

我们的客户还要求我们更改默认的开关外观.

目标是使用thiese开关:
在此输入图像描述 在此输入图像描述

这看起来真的像最新的材料设计开关,但用橙色代替"绿 - 蓝"颜色,就像这里一样.

约束

由于我们现在是minSdk 14,我们可以删除2个库"ActionBarSherlock"和"SwitchCompatLibrary",但这不是一个选项.的确,我们没有时间......

实际上,我尝试在我的项目的gradle文件appcompat-v7中添加依赖项,以便尝试使用带有材质主题的本机开关组件(请参阅此处),但这会因为重复的属性定义而提到错误,并提到了2个库以上.所以我不能用它,我不确定这应该有用......

dependencies {
(...)

compile project(':actionbarsherlock')
compile project(':switchCompatLibrary')
compile files('libs/android-support-v4.jar')

// incompatible avec actionbarsherlock and SwitchCompatLibrary...
// compile "com.android.support:appcompat-v7:22.0.+" 

(...)
}
Run Code Online (Sandbox Code Playgroud)

现有代码

所以这是执行代码.

在我的layout.xml文件中,我使用SwitchCompatLibrary开关:

        <de.ankri.views.Switch
            android:id="@+id/switchButtonNotification"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true" />
Run Code Online (Sandbox Code Playgroud)

在我的themes.xml文件中:

<style name="Theme.Orange" parent="@style/Theme.Sherlock">
    ...
    <!-- Theme switch with SwitchCompatLibrary -->
    <item name="switchStyle">@style/switch_light</item>
    <item name="textAppearance">@style/TextAppearance</item>
</style>
Run Code Online (Sandbox Code Playgroud)

使用SwitchCompatLibrary本身定义的样式信息

styles.xml:

<resources …
Run Code Online (Sandbox Code Playgroud)

xml android nine-patch android-layout android-theme

12
推荐指数
2
解决办法
1万
查看次数