使用android studio制作.9图

本文详细介绍了如何制作符合Android系统要求的点9图,并通过实例演示了如何避免常见错误,确保图片在不同尺寸屏幕上的适配效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

准备工作
1. 准备一张png的图片,这里在阿里图库上下载一张png图片

popup.png

放到mipmap文件夹下,然后右键操作如图

create

选择drawable文件夹保存

图示2

然后就可以删除mipmap文件夹下的原图了。

3. 选中这个未处理的点9图,然后点击9patch按钮

图示3

——————————————–分割线——————————-

制作

需求:文字居中,左右拉伸和上下拉伸,中间那个倒三角不要拉伸
需要了解的知识点
1.四边处理:

四点图

A和D的两个点(这里是两个点,1个像素格子),标记A代表横向拉伸沾染的像素源。同理,标记D代表纵向拉伸沾染的像素源。标记B和标记C,他们表示的是内容的显示位置。 2. 鼠标左键在边缘后按下就是画点,然后移动就会画线,如果想擦除线或者点,可以先放大(zoom),然后按住shift,鼠标左键按下就是擦除。 3. 看了好多点9图的制作教程,针对这个需求,总是绘制错误,想当然的以为下面才是对的

错误图

看右侧的效果预览图没有问题,完美啊,按住cmd+s保存


3. 使用这个点9图,去运行

  <TextView
        android:id="@+id/tv"
        android:gravity="center"
        android:textColor="#ffffff"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:background="@drawable/popup"
        android:text="Hello World!"/>
编译阶段就报错了

Error: java.lang.RuntimeException: Crunching Cruncher popup.9.png failed, see log
然后去百度,各种都是在gradle添加

android{
aaptOptions{
   cruncherEnabled = false
   useNewCruncher = false
     }
}

然并卵,编译还是不通过,只有看错误日志了

错误log

提示在底部边缘存在超过1个标记的区域(这里是2个了),那么去修改。改为1个标记区域

正确的示范

运行之后,满足要求啊。

效果图

4. 注意事项:
把A点画在倒三角那里,预览图就错了,这个不用说吧

错误打点1

有小伙伴可能会问,A处有两个点,这两个点的像素属性是一样的,可否只需要打一个点,不行!

错误打点2

最后:
系统控件在使用点9图作为背景时,要注意宽高最好使用wrap_content属性,xml里设置padding貌似不能得到想要的效果,所以在制图过程中请留出padding即可。

更多细节等您来玩。

### 如何在 Android Studio 中创建九宫格 (.9 片) #### 什么是 .9 片? `.9` 片是一种特殊的 PNG 文件,用于定义可拉伸区域和内容区域。它允许开发者指定哪些部分可以被拉伸而不会失真,从而适应不同的屏幕尺寸和分辨率。 --- #### 创建 `.9` 片的步骤 1. **准备原始片** 需要一张适合用作背景或其他 UI 元素的 PNG 像文件[^2]。确保像清晰且无损。 2. **重命名文件** 将原始 PNG 文件名改为 `*.9.png` 的形式。例如,如果原文件名为 `background.png`,则将其更名为 `background.9.png`。 3. **编辑 `.9` 片** 使用工具(如 Android Studio 或第三方软件)打开并编辑 `.9` 片: - 在片四周添加一条细线框。 - 定义 **拉伸区域** 和 **内容区域**: - 拉伸区域:通过绘制水平和垂直线条来标记片中可以安全拉伸的部分。 - 内容区域:标记出显示实际内容的安全范围,防止重要内容被裁剪或变形。 4. **保存并导入项目** 将编辑好的 `.9` 片放置到项目的 `drawable` 资源目录下。路径通常为 `..\projectname\app\src\main\res\drawable`。 5. **使用 `.9` 片** 在布局文件中引用该片作为背景或按钮资源。例如,在 XML 布局中设置如下属性: ```xml android:background="@drawable/background" ``` --- #### 示例代码 以下是实现九宫格功能的一个简单例子: ##### activity_main.xml (布局文件) ```xml <GridLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/gridLayout" android:layout_width="match_parent" android:layout_height="wrap_content" android:columnCount="3" android:rowCount="3"> <!-- 添加子视 --> </GridLayout> ``` ##### item.xml (单个网格项布局) ```xml <ImageView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="0dp" android:layout_height="0dp" android:layout_weight="1" android:scaleType="centerCrop" android:adjustViewBounds="true"/> ``` ##### MainActivity.java (Java 主逻辑) ```java import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.widget.GridLayout; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); GridLayout gridLayout = findViewById(R.id.gridLayout); // 动态加载片 for(int i=0; i<9;i++) { ImageView imageView = new ImageView(this); imageView.setImageResource(R.drawable.background); // 替换为你的 .9 片资源 GridLayout.LayoutParams params = new GridLayout.LayoutParams(); params.width = getResources().getDisplayMetrics().widthPixels / 3; params.height = params.width; imageView.setLayoutParams(params); gridLayout.addView(imageView); } } } ``` --- #### 注意事项 - 确保 `.9` 片的边界线宽度不超过 1px,否则可能导致渲染异常。 - 如果需要更复杂的交互效果,可以通过自定义 View 来扩展功能[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值