这个不同于ImageView控件,这个不是控件,是画在画布上的,类要继承与View。将图片导入到res文件夹的三个文件下面。
得到资源
得到图片的方式为:
myPic1=((BitmapDrawable)getResources();
getDrawable(R.drawable.p1)).getBitmap();
绘制图片
在onDraw(Canvas canvas)方法中绘制图片,
可以直接绘制:canvas.drawBitmap(myPic1, 0,0,null);
第一个参数是图画资源
后两个是在屏幕上的坐标,应该是左上角的坐标
图片的缩放
1. drawBitmap
public void drawBitmap(Bitmapbitmap, Rect src, Rect dst,Paint paint)
第一个Rect是图片的裁剪区域
第二个Rect是屏幕的裁剪区域
也就是把预定的图片区域显示在预定的屏幕区域上面,这是一种绘制图片的方式,但也可以实
通过这个方式实现缩放效果
例如:
canvas.drawBitmap(mBitmap, new Rect(100, 100, 300, 300), new Rect(100, 100,200, 200), null);
这里将 mBitmap 的 (100,100) 到 (300,300) 区域拿出来,自动缩放并画到屏幕的 (100,100) 到 (200,200) 区域。
=====》
2 通过Matrix实现缩放效果
具体实现跟下面的图片旋转的实现方式一样,只是用了Matrix的另一个方法,
public void setScale (float sx, float sy)
只需将下面旋转效果的代码中setRotate()方法替换为
//设置缩放
matrix.setScale(scale, scale);
其中scale为定义的缩放倍率:float scale = 1.0f;调节这个参数的大小就可以实现缩放。 用这个方法会构造新的Bitmap,会消耗内存,所以效率没有上面第一种方法的高。
图片的旋转
需要使用Matrix,他包含3*3的矩阵,专门用于图像变换匹配,必须被初始化,通过reset方法实现。通过setRotate设置旋转的角度,然后通过createBitmap()创建一个经过旋转等处理的Bitmap对象,然后将Bitmap画到屏幕上即实现了旋转效果
protected void onDraw(Canvas canvas)
{
super.onDraw(canvas);
//重置Matrix对象
matrix.reset();
//设置旋转
matrix.setRotate(angle);
//按matrix的旋转构造新的bitmap
Bitmap bitmap2 = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
//绘制旋转之后的图像
canvas.drawBitmap(bitmap2,(320-bitmap.getWidth())/2,(430-bitmap.getHeight())/2, null);
}