Android中容易被遗忘的知识点(转)
1,setCompoundDrawables(Drawable left, Drawable top,Drawable right, Drawable bottom)
设置图片出现在 textView,button,editText 的各个方向 . 其中 ,left 是 drawable 类型的 .
2. 如何获取上面的 drawable
Drawable drawable = getResources().getDrawable(R.drawable.username);
drawable.setBounds(5,1,60,50);
设置 drawable 的坐标为 5,1, 宽和高为 :60 和 50
3.
手动设置文本与图片相对位置时,常用到如下方法:
setCompoundDrawables(left, top, right, bottom)
setCompoundDrawablesWithIntrinsicBounds(left, top, right, bottom)
意思是设置 Drawable 显示在 text 的左、上、右、下位置。
但是两者有些区别:
setCompoundDrawables
画的
drawable
的宽高是按
drawable.setBound()
设置的宽高,
所以才有
The Drawables must already have
had setBounds(Rect) called.
使用之前必须使用 Drawable.setBounds 设置 Drawable 的长宽。
setCompoundDrawablesWithIntrinsicBounds
是画的
drawable
的宽高是按
drawable
固定的宽高,
所以才有
The Drawables' bounds will be set
to their intrinsic bounds.
即通过 getIntrinsicWidth() 与 getIntrinsicHeight() 获得,
4.
1 、 Drawable 就是一个可画的对象,其可能是一张位图( BitmapDrawable ),也可能是一个图形( ShapeDrawable ),还有可能是一个图层( LayerDrawable ),我们根据画图的需求,创建相应的可画对象
2 、 Canvas 画布,绘图的目的区域,用于绘图
3 、 Bitmap 位图,用于图的处理
4 、 Matrix 矩阵
1 、从资源中获取 Bitmap
1. Resources res = getResources();
2. Bitmap bmp = BitmapFactory.decodeResource(res, R.drawable.icon);
2 、 Bitmap → byte[]
public byte[] Bitmap2Bytes(Bitmap bm) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.PNG, 100, baos);
return baos.toByteArray();
}
public Bitmap Bytes2Bimap(byte[] b) {
if (b.length != 0) {
return BitmapFactory.decodeByteArray(b, 0, b.length);
} else {
return null;
}
}
public static Bitmap zoomBitmap(Bitmap bitmap, int width, int height) {
int w = bitmap.getWidth();
int h = bitmap.getHeight();
Matrix matrix = new Matrix();
float scaleWidth = ((float) width / w);
float scaleHeight = ((float) height / h);
matrix.postScale(scaleWidth, scaleHeight);
Bitmap newbmp = Bitmap.createBitmap(bitmap, 0, 0, w, h, matrix, true);
return newbmp;
}
drawable 转化成 bitmap
public static Bitmap drawableToBitmap(Drawable drawable) {
// 取 drawable 的长宽
int w = drawable.getIntrinsicWidth();
int h = drawable.getIntrinsicHeight();
// 取 drawable 的颜色格式
Bitmap.Config config = drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888
: Bitmap.Config.RGB_565;
// 建立对应 bitmap
Bitmap bitmap = Bitmap.createBitmap(w, h, config);
// 建立对应 bitmap 的画布
Canvas canvas = new Canvas(bitmap);
drawable.setBounds(0, 0, w, h);
// 把 drawable 内容画到画布中
drawable.draw(canvas);
return bitmap;
}
获得圆角图片
public static Bitmap getRoundedCornerBitmap(Bitmap bitmap, float roundPx) {
int w = bitmap.getWidth();
int h = bitmap.getHeight();
Bitmap output = Bitmap.createBitmap(w, h, Config.ARGB_8888);
Canvas canvas = new Canvas(output);
final int color = 0xff424242;
final Paint paint = new Paint();
final Rect rect = new Rect(0, 0, w, h);
final RectF rectF = new RectF(rect);
paint.setAntiAlias(true);
canvas.drawARGB(0, 0, 0, 0);
paint.setColor(color);
canvas.drawRoundRect(rectF, roundPx, roundPx, paint);
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
canvas.drawBitmap(bitmap, rect, rect, paint);
return output;
}
1 、 Bitmap 转换成 Drawable
.Bitmap bm=xxx; //xxx 根据你的情况获取
BitmapDrawable bd= new BitmapDrawable(getResource(), bm);
因为 BtimapDrawable 是 Drawable 的子类,最终直接使用 bd 对象即可。
2 、 Drawable 缩放
public static Drawable zoomDrawable(Drawable drawable, int w, int h) {
int width = drawable.getIntrinsicWidth();
int height = drawable.getIntrinsicHeight();
// drawable 转换成 bitmap
Bitmap oldbmp = drawableToBitmap(drawable);
// 创建操作图片用的 Matrix 对象
Matrix matrix = new Matrix();
// 计算缩放比例
float sx = ((float) w / width);
float sy = ((float) h / height);
// 设置缩放比例
matrix.postScale(sx, sy);
// 建立新的 bitmap ,其内容是对原 bitmap 的缩放后的图
Bitmap newbmp = Bitmap.createBitmap(oldbmp, 0, 0, width, height,
matrix, true);
return new BitmapDrawable(newbmp);
}