`
wen742538485
  • 浏览: 238992 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

android图形系统详解三:形状Drawable和九宫格

阅读更多
形状Drawable
当你想动态画2维图形,ShapeDrawable对象是可能是你合适的选择.使用ShapeDrawable,你可以随意画出原始的形状并且应用到任何风格.



  ShapeDrawable是一个Drawable的派生类,所以你可以用于任何想使用Drawable的地方—比如可能是一个View的背景,通过setBackgroundDrawable()所设置.当然,你也可以把你的形状作为它自己的自定义View绘制,然后以你喜欢的方式添加到你的Layout.因为ShapeDrawable有它自己的draw()方法,你可以创建一个View的子类然后在View.onDraw()的方法中画这个ShapeDrawable.下面是一个简单的View派生类,它仅把ShapeDrawable当作一个View绘出:



[java] view plaincopy
public class CustomDrawableView extends View { 
      private ShapeDrawable mDrawable; 
 
      public CustomDrawableView(Context context) { 
      super(context); 
 
      int x = 10; 
      int y = 10; 
      int width = 300; 
      int height = 50; 
 
      mDrawable = new ShapeDrawable(new OvalShape()); 
      mDrawable.getPaint().setColor(0xff74AC23); 
      mDrawable.setBounds(x, y, x + width, y + height); 
      } 
 
      protected void onDraw(Canvas canvas) { 
      mDrawable.draw(canvas); 
      } 
      } 

在构造函数中,以OvalShape定义了一个ShapeDrawable.然后给它设置了颜色和形状的边界.如果你不设置边界,形状是不会被画出的,如果你不设置颜色,将以黑色画之.


使用自定义View,你可以画任何东西.在上面的例子中,我们可以在一个Activity中用程序随意作画:

[java] view plaincopy
CustomDrawableView mCustomDrawableView; 
 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    mCustomDrawableView = new CustomDrawableView(this); 
 
    setContentView(mCustomDrawableView); 



如果你想在XMLlayout中画这个自定义drawable而不是在Activity中,那么这个CustomDrawableView类必须重写View(Context,AttributeSet)构造方法,此方法在从XML初始化一个View时被调用.然后添加一个CustomDrawable元素到XML,像这样:

[html] view plaincopy
<com.example.shapedrawable.CustomDrawableView 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      /> 
ShapeDrawable类(就像android.graphics.drawable包中的其它一些Drawable类型)允许你使用公开方法来定义drawable的各种属性.你要调整的一些属性可能有alpha透明,颜色过虑,抖动,opacity和color等.

  你也可以使用XML定义原始的drawable形状.更多的信息请看Drawable资源文档中的ShapeDrawables章节.

九宫格NinePatch
  一个NinePatchDrawable图形是一个可拉申的位图,在把它作为View的背景时,Android自动把它的大小拉伸来适应View的内容.一个例子就是标准按钮使用NinePatch作为自己的背景— 按钮必须能被拉申来适应文本的长度.NinePatchdrawable是一个标准的PNG图像,但它包含了一个额外的1像素宽的边框.它必须保存为.9.png这样的扩展名,并且放在你的工程的res/drawable/文件夹下.



  边框被用来定义图像的可拉伸区和静态区.你通过在上边框和左边框画1个(或多个)1像素宽的黑线来表明可伸缩区域(其它边框部分需保持完全透明或白色).你可以设定任意数量的可伸缩段:它们的相对大小不变,所以最大的段总是保持最大.



  你也可以通过在右边框和下边框画线来定义一个图像的可选的可绘制段(实际上,叫做填充线段).如果一个View对象设置了NinePatch作为背景然后又指定了自己的文本,它将拉伸自己以使所有的文本恰好处于被右和下的线段所指定的区域内.如果填充线段不存在,Android使用左和上的线段来定义这个可绘制区域.


左和上的线段定义了图像的哪些像素可以在拉伸时被复制;下和右的线段定义了图像的内容应被放入的区域,这些区域的位置都是相对的.



下面是一个用NinePatch文件定义一个按钮的例子:



这个NinePatch用上和左线段定义了一个可拉伸区域并用右和下线段定义了可绘制区域.在第一个图中,灰色虚线表明了拉伸时要被复制的区域,红色框表明了View的内容应在的区域.如果内容不适合这个区域,那么图像将被拉伸直到能适合.


  画9-patch的工具提供了一个极顺手的方式来创建你的NinePatch图像,它有一个WYSIWYG图像编辑器.如果你定义的可拉伸区域有产生像素复写的风险时,它甚至会发出警告.


XML例子



  下面是一个 layoutXML例子来演示如何添加一个NinePatch图像到一对按钮中.(NinePatch图像被保存为res/drawable/my_button_background.9.png)

[html] view plaincopy
<Button id="@+id/tiny" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_alignParentTop="true" 
        android:layout_centerInParent="true" 
        android:text="Tiny" 
        android:textSize="8sp" 
        android:background="@drawable/my_button_background"/> 
 
<Button id="@+id/big" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_alignParentBottom="true" 
        android:layout_centerInParent="true" 
        android:text="Biiiiiiig text!" 
        android:textSize="30sp" 
        android:background="@drawable/my_button_background"/> 



注意width和height被设置为"wrap_content"使得按钮能恰好包含文本.
下图是两个从XML和and上面所显示的NinePatch图像所画出的按钮.注意按钮的宽和高如何跟据文本而变化,以及背景图如何拉伸以适应它.


  • 大小: 16.8 KB
  • 大小: 3 KB
分享到:
评论

相关推荐

    android安卓APP之13种Drawable位图片资源.zip_android客户端是什么

    在Android应用开发中,Drawable是用于图形和图像处理的核心组件,尤其在UI设计和交互中扮演着重要角色。本资源包“android安卓APP之13种Drawable位图片资源.zip”涵盖了Android开发中常见的13种Drawable类型,这些...

    Android Drawable 各种高效用法

    九宫格图像是Android的一种特殊位图格式,允许指定可拉伸区域和内容区域,确保图片在不同尺寸屏幕上保持正确的比例和内容对齐。 10. **自定义Drawable**: 当标准的Drawable类无法满足需求时,可以创建自定义的...

    Android所有系统资源图标android.R.drawable.xxx查看软件

    Android所有系统资源图标android.R.drawable.xxx查看软件 源码地址:http://blog.csdn.net/dianyueneo/article/details/7197067

    android中的drawable集合

    在Android开发中,Drawable是图形和图像处理的重要组成部分,它是一种可以绘制到Canvas上的对象,广泛用于界面元素的装饰和状态表示。以下是对Android中drawable集合的详细解释: 1. **Bitmap Drawable**: Bitmap ...

    Android Drawable 全部 xml 元素和属性用法

    在Android开发中,Drawable是图形资源的核心组成部分,用于表示各种屏幕元素的外观,如按钮、背景、图标的形状和颜色。这些图形资源可以通过XML文件进行定义,提供了丰富的自定义选项。本篇将深入探讨Android ...

    android 九宫格

    在Android开发中,"九宫格"是一种常见的用户界面元素,尤其在设置、应用选择等场景下广泛应用。本文将深入探讨如何在Android中实现一个开机时的九宫格界面,并结合提供的"ImageLock"文件名,我们可以推断这是一个...

    android修改控件外观(使用drawable资源)

    5. **位图九宫格**:对于需要拉伸但保持内容不变的位图,可以使用Nine-Patch(9-patch)格式。这种特殊的PNG图片在边缘和角落添加了额外的像素信息,指示哪些部分可以拉伸,哪些部分应保持不变。 6. **引用和组合**...

    Android:Drawable样式和尺寸单位源代码

    在Android开发中,Drawable是图形和图像的基本容器,它允许开发者创建、管理和显示各种图形对象,如颜色、形状、位图等。理解Drawable及其样式代码对于构建美观且功能丰富的用户界面至关重要。本篇文章将深入探讨...

    Android高级应用源码-drawable(图片).rar

    在Android开发中,Drawable是处理图像资源的核心类,它不仅限于普通的图片,还包括状态选择器、九宫格图片、形状图等。本资源包"Android高级应用源码-drawable(图片)"提供了关于Android中Drawable使用的源码示例,这...

    android九宫格源码

    在Android开发中,"九宫格"是一种常见的用户界面元素,尤其在设置界面或应用启动页中非常流行。九宫格通常由一个GridLayout或者GridView控件实现,它能以3x3的形式展示图标或按钮,使得用户可以快速浏览并点击进行...

    自定义九宫格图片布局

    本教程将详细讲解如何通过自定义ViewGroup来实现一个功能丰富的九宫格图片布局,支持图片的编辑、删除和添加。 首先,我们需要创建一个新的Java类,继承自`ViewGroup`。这个类将作为九宫格的基础容器,我们称之为`...

    android九宫格游戏源码

    Android九宫格游戏是一款经典的移动平台小游戏,适合初学者用来学习Android应用开发的基本概念和技术。这个源码项目提供了一个很好的起点,可以帮助开发者了解如何在Android环境中创建一个交互式的用户界面和实现...

    微信群聊生成九宫格形式的头像

    本话题关注的是如何在Android平台上实现“微信群聊生成九宫格形式的头像”这一功能,这是一个常见的社交应用设计,用于展示群聊成员的个性化图标。接下来,我们将深入探讨实现这个功能所涉及的关键知识点。 首先,...

    九宫格样式实现源代码

    在Android开发中,九宫格布局是一种常见的UI设计模式,常用于展示图片、按钮或小图标等元素。这种布局方式可以有效地将九个相同大小的元素排列在一个3x3的网格中,使得用户界面看起来整洁且易于操作。下面我们将详细...

    android:drawable.xml相关应用

    ### Android: Drawable.xml 相关应用详解 #### 一、Drawable资源文件的使用与功能介绍 在Android开发中,`drawable.xml` 文件是用于定义UI元素的重要资源之一,它可以为应用提供灵活多变的视觉效果。例如,按钮、...

    Android九宫格拼图游戏代码

    【Android九宫格拼图游戏代码】是一款基于Android平台开发的简单益智游戏,它将一个3x3的图像切割成9个相同大小的小块,然后随机打乱顺序,玩家需要通过滑动小块来恢复原图。这篇博客文章详细介绍了如何实现这样一个...

    Android九宫格

    在Android开发中,"九宫格"是一种常见的用户界面元素,尤其在设置、应用选择等场景下使用广泛。九宫格通常由一个3x3的矩阵布局构成,每个单元格可以是一个图片、按钮或者可点击的其他控件,用于展示一系列小图标或...

    android实例之九宫格开机密码

    在Android系统中,九宫格开机密码是一种常见的用户身份验证方式,它提供了相较于传统数字密码更为直观和有趣的解锁体验。本实例将深入探讨如何在Android应用开发中实现一个类似三星手机上的九宫格解锁功能。 首先,...

    Android-Android九宫格显示多图或item仿照QQ空间图片列表

    在Android应用开发中,"Android九宫格显示多图或item仿照QQ空间图片列表"是一种常见的用户界面设计,主要用于展示一系列的图片或者图标,让用户能够快速浏览和选择。这个功能在社交应用、新闻阅读应用以及各种内容...

    android drawable下的xml详解

    ### Android Drawable 下的 XML 详解 #### 一、概述 在Android开发中,`drawable`是一种非常重要的资源类型,主要用于存放应用所需的图形图像资源。这些资源可以被用于UI设计、图标绘制等多种场景。通常,开发者会...

Global site tag (gtag.js) - Google Analytics