您的位置:首页 > 其它

好记性不如烂笔头(零)

2015-03-03 15:25 330 查看
俗话说,好记性不如烂笔头!

在平常的开发工作中,很多时候我们都会用到一些代码量比较小,但是却很有用的功能,但是,都只是写过就算,下一次再想起来用的时候,已经不知道该去哪儿找了。

常常因为这些小点而浪费时间,也随着年纪渐长,智商有限,还是靠记下来,以备不时之需呀。

获取圆形图片

/**
* bitmap 要进行剪裁的位图
* size 剪裁的圆形图片的大小
*/
public static Bitmap getCroppedRoundBitmap(Bitmap bitmap, int size) {
if (bitmap == null || bitmap.isRecycled() || size < 0) {
return null;
}

Bitmap result = Bitmap.createBitmap(size, size, Config.ARGB_8888);
Canvas canvas = new Canvas(result);
/* 一般圆是内切于一个正方形的,所以我们要从这张bitmap中找出一个最大的正方形的位置,以长或者宽的长度为正方形的边(哪个短取哪个)*/
int bmpWidth = bitmap.getWidth();
int bmpHeight = bitmap.getHeight();
int x = 0, y = 0;
if (bmpHeight > bmpWidth) {
x = 0;
y = (bmpHeight - bmpWidth) / 2;
} else if (bmpHeight < bmpWidth) {
x = (bmpWidth - bmpHeight) / 2;
y = 0;
}

Paint paint = new Paint();
/*srcRect 是我们要剪截的原图中的某块区域,可以为空,则从0,0,即图的左上角开始,而x,y,则是根据上面代码找出来的点*/
Rect srcRect = new Rect(x, y, bmpWidth, bmpHeight);
/*dstRect 是目标正方形的大小*/
Rect dstRect = new Rect(0, 0, size, size);

//对于paint的设置是为了要防止出现锯齿,但这种设置,对于如果利用clipPath来画的图像是不起作用的。
paint.setAntiAlias(true);
paint.setFilterBitmap(true);
paint.setDither(true);
canvas.drawARGB(0, 0, 0, 0);
canvas.drawCircle(size / 2, size / 2, size / 2, paint);
/*利用Xfermode的SRC_IN,则只绘制原图bitmap在圆圈中的区域,从而获取圆形切图*/
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
canvas.drawBitmap(bitmap, srcRect, dstRect, paint);

return result;
}


获取系统方向(旋转)是否锁定

private static final int DEFAULT_ACCELEROMETER_ROTATION = -1;
int lock = Settings.System.getInt(getContentResolver(), Settings.System.ACCELEROMETER_ROTATION,
DEFAULT_ACCELEROMETER_ROTATION);
if (lock == 1) {
mTvOrientationLock.setText("Unlocked");
} else {
// rotation is Locked
mTvOrientationLock.setText("Locked");
}


遇到这种与系统设置相关的配置信息时,我们应该先去Settings等系统类中去找一下,然后有针对性地利用关键字进行搜索,效果会好很多。

从URI中获取图片的地址

private static String getRealPathFromURI(Context context, Uri contentURI) {
String result = "";
Cursor cursor = context.getContentResolver().query(contentURI, null, null, null, null);
if (cursor == null) {
result = contentURI.getPath();
} else {
if (cursor.moveToFirst()) {
int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
result = cursor.getString(idx);
}
cursor.close();
}
return result;
}


根据图片路径读取图片的旋转角度

private static int readPictureDegree(String path) {
int degree = 0;
try {
ExifInterface exifInterface = new ExifInterface(path);
int orientation = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION,
ExifInterface.ORIENTATION_NORMAL);
switch (orientation) {
case ExifInterface.ORIENTATION_ROTATE_90:
degree = 90;
break;
case ExifInterface.ORIENTATION_ROTATE_180:
degree = 180;
break;
case ExifInterface.ORIENTATION_ROTATE_270:
degree = 270;
break;
}
} catch (IOException e) {
e.printStackTrace();
}
return degree;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息