Bitmap作为图片的一种承载方式,他可以提供图片文件的信息,也可以对图片做出相应的效果与操作。
一:Bitmap
Bitmap作为图片的一种承载方式,他可以提供图片文件的信息,也可以对图片做出相应的效果与操作。他有两种资源引用方式和三种绘制图形的方式。
1:2种引用方式
(1)利用BitmapFactory工厂的形式创建Bitmap
◆声明Bitmap对象
private Bitmap bitmap;//声明Bitmap对象
◆资源引用,获得Bitmap对象第一种载入资源的方式
bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.a1);
(2)利用BitmapDrawable创建Bitmap
◆声明Bitmap、BitmapDrawable对象private Bitmap bitmap;//声明Bitmap对象
private BitmapDrawable bitmapDrawable;//声明bitmapDrawable对象
◆资源引用获得BitmapDrawable对象// 第二种载入资源的方式
bitmapDrawable = (BitmapDrawable) getResources().getDrawable(
R.drawable.a1);
◆获得Bitmap对象bitmap = bitmapDrawable.getBitmap();//得到bitmap对象
2:3种绘制图形的方式
(1)通过画布Canvas对象的drawBitmap方法绘制// 第一种资源绘制方式
canvas.drawBitmap(bitmap, 0, 0, null); //从(0,0)点开始绘制图片大小的Bitmap
(2)通过Rect(负责图形的裁剪)和RectF(负责填充的区域)绘制// 第二种资源绘制方式
Rect rect = new Rect(0,0,10,10);//图形裁剪,从00开始裁剪,裁剪的图片大小为10*10
RectF rectf = new RectF(20,20,100,100);//将裁剪的图片绘制到起点为20,20,大小为80*80的区域上
canvas.drawBitmap(bitmap, rect, rectf, null);
(3)通过bitmapDrawable的setbounds方法设置填充区域,调用对象的draw方法绘制// 第三种资源绘制方式
bitmapDrawable.setBounds(0, 0, 300, 300);// 从00开始,图片填充到300*300的区域上
bitmapDrawable.draw(canvas);// 绘制
以上的几种方式可以任意的组合,均可以达到效果。
二:具体应用
功能:继承自SurfaceView,自定义视图,完成 图片的绘制
1:继承自,SurfaceView,重写三个方法,自定义绘制方法(注意画布的锁定与解锁)public class MyView extends SurfaceView implements Callback {
private Bitmap bitmap;//声明Bitmap对象
private BitmapDrawable bitmapDrawable;//声明bitmapDrawable对象
public MyView(Context context) {
super(context);
getHolder().addCallback(this);
// 第一种载入资源的方式
// bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.a1);
// 第二种载入资源的方式
bitmapDrawable = (BitmapDrawable) getResources().getDrawable(
R.drawable.a1);
bitmap = bitmapDrawable.getBitmap();//得到bitmap对象
}
public void draw() {
Canvas canvas = getHolder().lockCanvas();// 锁定画布
canvas.drawColor(Color.WHITE);
// 第一种资源绘制方式
// canvas.drawBitmap(bitmap, 0, 0, null); //从(0,0)点开始绘制图片大小的Bitmap
// 第二种资源绘制方式
// Rect rect = new Rect(0,0,10,10);//图形裁剪,从00开始裁剪,裁剪的图片大小为10*10
// RectF rectf = new
// RectF(20,20,100,100);//将裁剪的图片绘制到起点为20,20,大小为80*80的区域上
// canvas.drawBitmap(bitmap, rect, rectf, null);
// 第三种资源绘制方式
bitmapDrawable.setBounds(0, 0, 300, 300);// 从00开始,图片填充到300*300的区域上
bitmapDrawable.draw(canvas);// 绘制
getHolder().unlockCanvasAndPost(canvas);// 解锁画布
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
draw();// 调用
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
}
}
2:主界面中引入自定义视图public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new MyView(this));//加载自定义视图
}
3:结果:从界面的(0,0)点平铺到(300,300)的位置上
你曾经说我走以后希望还有联络
能够聆听彼此的苦乐
说实在的
我已不能理智对待了