今天要做一个图片效果是根据一些条件来画出一张完整图片的一部分,所以先自己做个demo来测试下使用Canvas的一个方法,就是canvas.drawBitmap(bitmap, rect, src, null);
直接看代码:
首先是mainActivity
import android.app.Activity;
import android.os.Bundle;
public class MyLayoutActivity extends Activity {
private RecorderView recorderView=null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.recorderView = new RecorderView(this);
setContentView(recorderView);
}
}
使用一个view来显示,接下来就是view的代码
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.view.View;
/**
*
* @author Yijun
*
*/
public class RecorderView extends View implements Runnable {
private Paint mPaint = null;
Bitmap mBitmap = null;
static int i = 0;
public RecorderView(Context context) {
super(context);
mPaint = new Paint();
//找到需要局部显示的原图,一般可以是进度条
mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.icon);
// 开启新线程
new Thread(this).start();
}
// view的画图都在onDraw里面执行
@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas);
// canvas.drawColor(Color.WHITE);
RecorderView.drawImage(canvas, mBitmap, mBitmap.getWidth(),
mBitmap.getHeight(), mBitmap.getWidth(), mBitmap.getHeight());
// RecorderView.drawImage(canvas, mBitmap, 50, 50);
// canvas.drawBitmap(mBitmap, rect, src, null);
}
@Override
public void run() {
while (true) {
try {
// 这里模拟图片伸缩条件及幅度
Thread.sleep(300);
i += 3;
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (i > 20) {
i = 0;
}
postInvalidate();// 在新线程中更新UI
}
}
public static void drawImage(Canvas canvas, Bitmap bitmap, int x, int y,
int w, int h) {
Rect rect = new Rect();
Rect src = new Rect();
src.left = x;
src.top = y;
src.right = x + w - i;
src.bottom = y + h;
// 第一个null表示图片区域为空,就是用原图大小
// src可以理解为画布区域,它可以决定图片rect的大小,如果图片区域不为空,那图片区域会来适应画布区域
// canvas.drawBitmap(bitmap, rect, src, null);
canvas.drawBitmap(bitmap, null, src, null);
rect = null;
src = null;
}
private void drawImage(Canvas canvas, Bitmap bitmap, float x, float y) {
canvas.drawBitmap(bitmap, x, y, null);
}
}
呃..drawImage复写了一个,主要是用于测试用的...主要是第一个方法
其实这效果就和progressbar类似,只是它是一张图片来显示的,这样我们就可以让UI妹妹来给出好看的图片啦~~