使用Draw 9-patch工具可以允许你容易的创建NinePatch图像,以下步骤指导你使用Draw 9-patch工具,由PNG图像创建NinePatch图像。
(1) 在你的电脑上找到SDK/tools目录,启动draw9patch程序。
(2) 加载PNG图像到Draw 9-patch窗口,工作区域就打开了。
(3) 在图像的左边和上边的周边,左键选择拉伸区域和内容区。使用右键取消选择的区域。
(4) 保存你的图像。图像的后缀名是.9.png
选项的意思:
Zoom:调整画图区域图像的显示的大小
Patch scale:调整图像在预览区域的大小
Show lock:当鼠标悬停在图标上时,显示不可以绘制的区域。
Show patchs:预览图像拉伸的区域
Show content:当前操作的像素点在拉伸预览区域中的相对位置和效果。
Show bad patchs:为可能人为的拉伸区域设置红色的边框。如果你消除所有的坏块,你伸展的图像视觉的连贯性将保持。
注意事项:
在使用Ninepatch图像时,必须实现Ninepatch类,使用其draw()方法,使用Canvas的drawBitmap不能实现显示效果。
代码:
package com.example.ninepatchtest;
import android.content.Context;
import android.content.res.Resources.Theme;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.NinePatch;
import android.graphics.Paint;
import android.graphics.Rect;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;
public class MySurfaceView extends SurfaceView implements Callback, Runnable {
private SurfaceHolder surfaceHolder;
private Canvas canvas;
private Paint paint;
private Bitmap bird_old;
private Bitmap bird_9patch;
private NinePatch nPatch;
private Thread thread;
private Rect rect;
private Rect rect2;
private Rect rect3;
private Rect rect_patch;
private Rect rect_patch2;
private Rect rect_patch3;
private boolean flag = false;
public MySurfaceView(Context context) {
super(context);
this.setKeepScreenOn(true);
surfaceHolder = getHolder();
surfaceHolder.addCallback(this);
bird_old = BitmapFactory.decodeResource(getResources(), R.drawable.bird_old);
bird_9patch = BitmapFactory.decodeResource(getResources(), R.drawable.bird_9patch);
nPatch = new NinePatch(bird_9patch, bird_9patch.getNinePatchChunk(), null);
paint = new Paint();
paint.setAntiAlias(true);
rect = new Rect(0, 0, bird_old.getWidth(), bird_old.getHeight());
rect2 = new Rect(0, bird_old.getHeight() + 20, bird_old.getWidth()*2, bird_old.getHeight()*3 + 20);
rect3 = new Rect(0, bird_old.getHeight()*3 + 40, bird_old.getWidth()*3, bird_old.getHeight()*6 + 40);
rect_patch = new Rect(300, 0, 300 + bird_9patch.getWidth(), bird_9patch.getHeight());
rect_patch2 = new Rect(300, bird_9patch.getHeight() +20, 300 + bird_9patch.getWidth()*2, bird_9patch.getHeight()*3 + 20);
rect_patch3 = new Rect(300, bird_9patch.getHeight()*3 + 40, 300 + bird_9patch.getWidth()*3, bird_9patch.getHeight()*6 +40);
thread = new Thread(this);
this.setFocusable(true);
}
public void draw() {
canvas = surfaceHolder.lockCanvas();
try {
if (canvas != null) {
canvas.drawColor(Color.BLACK);
canvas.drawBitmap(bird_old, null, rect, paint);
canvas.drawBitmap(bird_old, null, rect2, paint);
canvas.drawBitmap(bird_old, null, rect3, paint);
nPatch.draw(canvas, rect_patch);
nPatch.draw(canvas, rect_patch2);
nPatch.draw(canvas, rect_patch3);
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally{
if (canvas != null) {
surfaceHolder.unlockCanvasAndPost(canvas);
}
}
}
@Override
public void run() {
// TODO Auto-generated method stub
while (flag) {
draw();
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
@Override
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
// TODO Auto-generated method stub
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
flag = true;
thread.start();
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
flag = false;
}
}
一位大牛的NinePatach文章:http://blog.youkuaiyun.com/feng88724/article/details/6170121
工程下载:http://download.youkuaiyun.com/detail/zhaoshiqing7/4488658