jjzjj

安卓 : Alignment bug in making/showing 9patch image

coder 2023-11-18 原文

九补丁:

截图:

布局 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>

期望的结果:

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

垃圾桶图标有两个元素:图标本身和它后面的线性渐变。 NinePatch 图像包含三个可拉伸(stretch)区域和一个静态区域以容纳这些元素。图形中间的垃圾桶图标是静态的,应该直接出现在屏幕的水平中心和底部。渐变应在屏幕底部从一侧延伸到另一侧。

错误?

NinePatch 图像在图像的两侧水平方向仅包含一个像素的可拉伸(stretch)区域。其效果应该是垃圾桶图标直接出现在中央(左侧1像素==右侧1像素)。但是,正如您在上面的屏幕截图中看到的那样,情况并非如此。注意:此屏幕截图取 self 的测试手机 T-Mobile G2。在模拟器中可以看到同样的效果。然而,在 draw9patch 预览和 eclipse Graphical Layout View 中,图像分布完美。

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

答案、解决方法和真正的问题

我使用一些简单的 NinePatch 图像进行了一些测试,每侧最多有六个可拉伸(stretch)区域。我注意到至少在一个测试用例(手机、模拟器、draw9patch、eclipse 中的图形布局)中显示它们时存在一些问题。

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

我尝试将图像大小重新缩小到 100 像素左右以移除一些冗余像素,但错误又回来了!它不仅回来了,而且图标被放置在与屏幕中心完全相同的偏移位置。我不明白为什么会这样。

有人有什么想法吗?这是错误吗?

鉴于我上面描述的变通办法,我目前可以正常工作,但如果有人有任何建议,我正在听取。

最佳答案

使用 4 点 制作你的 9 补丁图像,就像我在这方面所做的那样......它会起作用。

创建 9-patch 图像的技巧。(不是设计师,告诉你我的基础)

  • 在左侧和顶部放置点
  • 如果中间有一些文字或图片..然后把点放在左边 和图像的右侧以及该图像或文本的顶部和底部。
  • 始终看到剩余空间的数量以及两侧(左右和上下)的点数不相等。
  • 在使用 2x 检入之前,始终检查一次预览或右侧 到 6 倍

关于安卓 : Alignment bug in making/showing 9patch image,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6766778/

有关安卓 : Alignment bug in making/showing 9patch image的更多相关文章

  1. 安卓apk修改(Android反编译apk) - 2

    最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路

  2. ruby-on-rails - 每当 gem : I set :output but the logfile doesn't show up where I'd expect it to - 2

    在我的schedule.rb文件中,我有以下几行:set:output,'/log/cron_log.log'every5.minutesdocommand'echo"hello"'end我按照这个问题Rails,usingwhenevergemindevelopment中的建议运行了whenever-w,并且我假设cronfile已编写并正在运行。(我也尝试重新启动Rails服务器。)当我运行$crontab-l时,我看到以下内容:0,5,10,15,20,25,30,35,40,45,50,55****/bin/bash-l-c'echo"hello">>/log/cron_log

  3. ruby-on-rails - 事件管理员 : Can't access show/edit pages - 2

    我在使用ActiveAdmin时遇到问题。以下是版本:ruby'2.2.1'rails'4.2.0'activeadmin:1.0.0.pre1arbre:1.0.3(提到这个是因为它似乎与我的问题有某种联系)我们升级到rails4.2并且还必须升级activeadmin(从0.5开始)。经过几次调整(尤其是授权系统)之后,一切似乎都很好,除了一个大问题:我只能访问索引页面。当转到具有ID的页面时(例如:“http://localhost:3000/admin/companies/2968”),我收到此错误:没有路由匹配{:action=>"edit",:controller=>"ad

  4. ruby-on-rails - 设计注销错误 - 找不到 UsersController 的操作 'show' - 2

    设计生成了以下代码以将用户注销:并且在执行rakeroutes时出现路由destroy_user_sessionDELETE/users/sign_out(.:format){:action=>"destroy",:controller=>"devise/sessions"}但是我收到一条错误消息:Theaction'show'couldnotbefoundforUsersController有什么想法吗? 最佳答案 路径是正确的,但如果你仔细观察,你会发现它不是GET请求而是DELETE请求,所以传递方法::delete%>编辑:

  5. ruby-on-rails - rails 引擎 : rake routes show its routes but on rspec execution "No route matches" is thrown - 2

    我正在尝试测试我的应用程序正在使用的引擎内部的Controller。规范不在引擎中,而是在应用程序本身中(我试图在引擎中进行测试,但也遇到了问题)。我的引擎有以下routes.rb:Revision::Engine.routes.drawdoresources:steps,only:[]docollection{get:first}endend引擎正常挂载在应用routes.rb上:mountRevision::Engine=>"revision"当我运行rakeroutes时,在最后一行我得到:RoutesforRevision::Engine:first_stepsGET/step

  6. ruby - 在 Rails 中覆盖 "show"资源路由 - 2

    resources:some_resource即有路由/some_resource/:id事实上,:idforsome_resource会一直保存在session中,所以我想重写路径/some_resource/:id使用/some_resource/my。或者我想用/some_resource/覆盖它并删除路径GET/some_resource/以进行索引操作。我怎样才能达到这两个目标? 最佳答案 在你的routes.rb中放置:get"some_resource"=>"some_resource#show"行前resources

  7. ruby-on-rails - rails ActiveAdmin : showing table of a related resource in the same view - 2

    当使用RailsActiveAdmingem显示资源时,我想显示另一个关联模型的表格。假设一个酿酒厂有很多:products。现在我想在Winery管理资源的show页面上显示关联的产品。我希望它是一个类似于我在Products资源的index上得到的表格。我让它工作了,但只能通过手动重新创建HTML结构,这很糟糕。是否有更简洁的方法来为关联资源的特定子集创建index表样式View?我有什么,有点糟透了:showtitle::namedo|winery|attributes_tabledorow:namerow(:region){|o|o.region.name}rows:prima

  8. (一)专题介绍:移动端安卓手机改造成linux服务器&linux服务器中安装软件、部署前后端分离项目实战 - 2

    快捷目录前言一、涉及到的相关技术简介二、具体实现过程及踩坑杂谈1.安卓手机改造成linux系统实现方案2.改造后的手机Linux中软件的安装3.手机Linux中安装MySQL5.7踩坑实录4.手机Linux中安装软件的正确方法三、Linux服务器部署前后端分离项目流程1.前提准备(安装必要软件,搭建环境):2.前后端分离项目的详细部署过程:总结前言总体概述:本篇文章隶属于“手机改造服务器部署前后端分离项目”系列专栏,该专栏将分多个板块,每个板块独立成篇来详细记录:手机(安卓)改造成个人服务器(Linux)、Linux中安装软件、配置开发环境、部署JAVA+VUE+MySQL5.7前后端分离项目

  9. ruby-on-rails - rails : Why images are not showing in my rails basic app - 2

    我的index.html.erb代码-Listingproducts'list_image')%>图像在app\assets\images下..但是前端没有显示静态图像。当我Firebug它时,我相信图像标签是正确形成的...让我知道我在这部分缺少什么。截图-图片也到位了-让我知道我做错了什么,我该如何解决。编辑github.com/swapnesh/depot请告诉我为什么它在我的案例中不起作用。尽管更改/images/product1.jpgTo/assets/product1.jpg使其正常工作。 最佳答案 如果您正在使用As

  10. ruby-on-rails - rails : how to show user's "last seen at" time? - 2

    我正在使用存储current_sign_in_at和last_sign_in_at日期时间的设备。但是假设用户在一个月前登录但最后一次查看页面是在5分钟前?有什么方法可以显示(“5分钟前用户最后一次出现”)。 最佳答案 这个怎么样:创建迁移以向用户添加新字段以存储用户最后一次出现的日期和时间:railsgmigrationadd_last_seen_at_to_userslast_seen_at:datetime向您的应用程序Controller添加一个操作前回调:before_action:set_last_seen_at,if:

随机推荐