Android NinePatch

Android中可以使用一种9-patch格式的图片,实现可拉伸效果。

     9-Patch图片是指图片被标记的部分能够被拉伸的PNG文件,定义的时候需要以“.9.png”结尾。但其标识是文件名而不需要尾部的“.9.png”。

     9-Patch是PNG图片的变种,它使用1个像素的边界来定义图片拉伸的区域。 创建9-Patch,先沿着图片的左上边界画1个像素的黑线来表示拉伸区域。其他未标记部分不会被拉伸,标记部分的相对大小会和图片大小变换一致。

     9-Patch是为Views和Activities创建背景的一种最强大的工具,因为这些Views和Activities具有变化的大小。例如,Android使用9-patch为button创建背景。

     但在使用过程中,由于Android的API doc很矬,简直不知道如何下手,网上去查,全都是说在xml文件中用android:background来指定,根本找不到直接在代码中使用的相关介绍。于是只好自己去看sdk源文件了,才终于把它搞定了。

     下面说一下具体做法:

     1. 首先制作一张9-patch图片,假设文件名是 image.9.png,将其放入res/drawable文件夹中;

     2. 写如下代码:

       Bitmap bmp = BitmapFactory.decodeResource(res, R.drawable.image);

      // res 为取得的Resources对象

        NinePatch npImage = new NinePatch(bmp, bmp.getNinePatchChunk(), null);

      然后在需要绘制的地方使用下面语句:

       npImage.draw(canvas, rect);

    3. Android中的Rect对象是(left, top, right, buttom)格式的,我一开始以为和Ruby 一样是(left, top, width, height)格式,结果老是画不出来,汗!


class MyView extends View{
    Bitmap bm1,bm2;
    Paint paint=new Paint();
    public MyView(Context context) {
        super(context);
        bm1 = BitmapFactory.decodeResource(getResources(), R.drawable.t1);
        bm2 = BitmapFactory.decodeResource(getResources(), R.drawable.t2);
    }


    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        RectF rectf = new RectF(0, 0, 240, 280);
        //普通png放大
        canvas.drawBitmap(bm1, null, rectf, paint);
        //创建一个ninePatch的对象实例,
        //第一个参数是bitmap
        //第二个参数为如何处理拉伸方式, .9.png中自身有这些信息,只需要调用getNinePatchChunk()即可
        //第三个参数是图片名,可为空
        NinePatch np = new NinePatch(bm2, bm2.getNinePatchChunk(), null);
        //9妹png放大
        np.draw(canvas, rectf);
    }
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值