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)的位置上

093431643.jpg


你曾经说我走以后

  • 希望还有联络

  • 能够聆听彼此的苦乐

  • 说实在的

  • 我已不能理智对待了

  • C_0004.gif