zoukankan      html  css  js  c++  java
  • Android之nine-patch详解

    9妹---NinePatch (SDK中/tools/draw9patch.bat),

    Android SDK中自带的一个小工具,能够对.png图片进行处理,生成一个.9.png格式的图片,

    如果使用直接.png格式的图片,图像拉伸操作时,图片就会有失真,而.9.png是Android里所支持的一种特殊的图片格式,可以实现部分拉伸,

    NinePatch的使用:

    画出2条线,确定图片的缩放区域,之所以叫9妹,因为她是将图片分为9个块,绿色的为不可缩放部分,红色的是可缩放部分,


    直接缩放效果和使用9妹处理后的效果:


    下面看一下实际效果,
      
     

    [java]public class TestActivity extends Activity  { 
     
        @Override 
        public void onCreate(Bundle savedInstanceState) { 
            super.onCreate(savedInstanceState); 
            setContentView(new MyView(this)); 
        } 

     
    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); 
        } 

    public class TestActivity extends Activity  {

     @Override
     public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(new MyView(this));
     }
    }

    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);
     }
    }Oh,9妹威武~~~


    总结:

    1.九妹将图片分为9个区域,红色部分是可伸缩部分,其他为不可伸缩部分

    2.上边,左边 交互区表示可伸缩部分;下边,右边  表示pending空间间隙

    3.上边和下边可以用一个像素点表示就可

  • 相关阅读:
    mysql启动和关闭外键约束的方法(FOREIGN_KEY_CHECKS)
    如果感觉不好,最后一面你需要更努力表达你的优势。最后一面打动面试官的可能往往是你的真诚和热情
    你的最终目的不是要进入该公司,而是要进入该公司你最想去的部门乃至项目组
    如果你说最近在看《诛仙》,平时喜欢玩LOL,你就是在把自己往悬崖上推
    Qt中嵌入Directx11(有句柄就可以)
    2015腾讯暑期实习武汉站面试经历(大学里的小朋友有这样的技术水平,只能说他规划的好、觉醒的早)
    NET Core开发-获取所有注入(DI)服务
    jQuery.data的是jQuery的数据缓存系统
    理解数字图像处理中的卷积
    Obstack是C标准库里面对内存管理的GNU扩展
  • 原文地址:https://www.cnblogs.com/jasonxcj/p/4794444.html
Copyright © 2011-2022 走看看