Bitmap做为图片的一种承载方式,他能够提供图片文件的信息,也能够对图片作出相应的效果与操做。
java
一:Bitmapcanvas
Bitmap做为图片的一种承载方式,他能够提供图片文件的信息,也能够对图片作出相应的效果与操做。他有两种资源引用方式和三种绘制图形的方式。ide
1:2种引用方式
ui
(1)利用BitmapFactory工厂的形式建立Bitmap
this
◆声明Bitmap对象spa
private Bitmap bitmap;//声明Bitmap对象 |
◆资源引用,得到Bitmap对象code
第一种载入资源的方式 bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.a1); |
(2)利用BitmapDrawable建立Bitmap
orm
◆声明Bitmap、BitmapDrawable对象对象
private Bitmap bitmap;//声明Bitmap对象 private BitmapDrawable bitmapDrawable;//声明bitmapDrawable对象 |
◆资源引用得到BitmapDrawable对象blog
// 第二种载入资源的方式 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)的位置上
你曾经说我走之后