2025-05-23

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妹威武~~~
 

  

摘自  柒尐狐的專欄 
 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *