主要的参考文章出处:http://www.cnblogs.com/renhui/p/7456956.html
今天对应的要学习的内容是:在 Android 平台绘制一张图片,使用至少 3 种不同的 API,ImageView,SurfaceView,自定义 View。
1. ImageView 绘制图片
Bitmap bitmap = BitmapFactory.decodeFile(Environment.getExternalStorageDirectory().getPath() + File.separator + "11.jpg");
imageView.setImageBitmap(bitmap);
Bitmap的获取1、资源文件中获取
/**
将sd中的文件转化成Bitmap对象。
* 将资源文件转换成Drawabled对象然后再进行转换*/
public Bitmap getBitmap1(){
Drawable db = getResources().getDrawable(R.drawable.logo_picc);
BitmapDrawable drawable = (BitmapDrawable)db;
Bitmap bitmap = drawable.getBitmap();
return bitmap;
}
/**
* 直接使用BitmapFactory进行转换*/
public Bitmap getBitmap2(){
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.logo_picc);
return bitmap;
}
/**
* 使用Canvas进行转换*/
public Bitmap getBitmap3(){
Drawable db = getResources().getDrawable(R.drawable.logo_picc);
Bitmap bitmap = Bitmap.createBitmap(db.getIntrinsicWidth(), db.getIntrinsicHeight(),
Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
db.setBounds(0, 0, db.getIntrinsicWidth(), db.getIntrinsicHeight());
db.draw(canvas);
return bitmap;
}
2、
/**
* 先获取输入流,然后decode*/
public Bitmap getBitmp1(String path){
Bitmap bitmap =null;
try {
File file = new File(path);
if(file.isFile()){
InputStream input = new FileInputStream(file);
BitmapFactory.Options opt = new BitmapFactory.Options();
opt.inPreferredConfig = Bitmap.Config.RGB_565;
opt.inPurgeable = true;
opt.inInputShareable = true;
opt.inSampleSize = 5;//这个是同比例缩放,5就表示同比例缩小一倍。图片文件太大如果不进行设置就会导致OOM错误
bitmap = BitmapFactory.decodeStream(input, null, opt);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return bitmap;
}
/**
* 直接使用BitmapFactory的decodeFile方法*/
public Bitmap getBitmap2(String path){
BitmapFactory.Options opt = new BitmapFactory.Options();
opt.inPreferredConfig = Bitmap.Config.RGB_565;
opt.inPurgeable = true;
opt.inInputShareable = true;
opt.inSampleSize = 5;//这个是同比例缩放,5就表示同比例缩小一倍。图片文件太大如果不进行设置就会导致OOM错误
Bitmap bitmap = BitmapFactory.decodeFile(path, opt);
return bitmap;
}
2. SurfaceView 绘制图片
SurfaceView surfaceView = (SurfaceView) findViewById(R.id.surface);
surfaceView.getHolder().addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceCreated(SurfaceHolder surfaceHolder) {
if (surfaceHolder == null) {
return;
}
Paint paint = new Paint();
paint.setAntiAlias(true); //抗锯齿
paint.setStyle(Paint.Style.STROKE);
Bitmap bitmap = BitmapFactory.decodeFile(Environment.getExternalStorageDirectory().getPath() + File.separator + "11.jpg"); // 获取bitmap
Canvas canvas = surfaceHolder.lockCanvas(); // 先锁定当前surfaceView的画布
canvas.drawBitmap(bitmap, 0, 0, paint); //执行绘制操作
surfaceHolder.unlockCanvasAndPost(canvas); // 解除锁定并显示在界面上
}
@Override
public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {
}
@Override
public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
}
});
3.自定义view
public class CustomView extends View {
Paint paint = new Paint();
Bitmap bitmap;
public CustomView(Context context) {
super(context);
paint.setAntiAlias(true);
paint.setStyle(Paint.Style.STROKE);
bitmap = BitmapFactory.decodeFile(Environment.getExternalStorageDirectory().getPath() + File.separator + "11.jpg"); // 获取bitmap
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
// 不建议在onDraw做任何分配内存的操作
if (bitmap != null) {
canvas.drawBitmap(bitmap, 0, 0, paint);
}
}
}
注:别忘记了权限,否则是不会展示成功的。
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>