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);  

}

全部评论

相关推荐

我是小红是我:学校换成中南
点赞 评论 收藏
分享
11-01 20:03
已编辑
门头沟学院 算法工程师
Amazarashi66:这种也是幸存者偏差了,拿不到这个价的才是大多数
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务