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

}

全部评论

相关推荐

原来已经一年了,因为没有加任何实验室没有学长学姐带,再一次偶然的机会下刷到我们学校的牛肉哥,和他聊天之后发现他也没加实验室能进大厂,我就燃起了希望,去年大概 4 月份找好路线 零基础 开始学 5 月背八股和开始刷算法很难受 7-8 月焦虑躯体化害怕找不到实习 9 月找到一家像样的小厂去实习了 4 个月大三上期末考试结束之后 1 月份回来边实习边准备工作压力很大 当时只有字节、百度、商汤的面试,字节三面挂了,百度 oc,商汤 二面挂(差评 无效面试),之后来深圳百度实习之后还是觉得不甘心一直没把算法和八股扔下一直在准备,百度实习的时候 mt 交给我一个特别重要的工作数据库迁移(特别感谢 mt ,这个需求学到了很多东西处理了一堆线上问题),本来看着暑期他们面试都很困难,然后听说百度要涨实习薪资(然而 5 月并没有涨),就想着留在百度吧也懒得面试了,4 月 20 多的时候字节 hr 打电话约面问我要不要尝试一下询问了 1 月份三面为啥会挂有没有学习 ai 知识(因为字节这边后端岗位偏 ai),我来到百度之后全面拥抱 AI 也认识了我的好兄弟 X 哥,他在百度 XX 部门 Agent 实习,他属于是我 Agent 的启蒙老师,来百度之后一直在了解 AI 这一块,我就接受了字节的面试,一面的时候 20 分钟实习拷打然后突然说 30 分钟代码考核我心就凉了以为是 kpi,算法题是手撕高并发安全下的令牌桶限流器,我写了整整 80 多行代码最后也写出来了,但是从来没看到过出这种题能 oc 的我也就不管了,后边面试也是很顺利但是流程有点长可能一直在横向吧总结结果是好的!!!感谢这一年努力的自己和遇到的各位互联网大佬分享的知识!!!ps 图二纯感慨 (觉得🍬请不要喷我)欢迎大家一起交流学习呀!!!!
点赞 评论 收藏
分享
许愿一个offer_...:不是啊,这个只代表你的面试官提交了你的面评,面试是否通过还是要看官网状态呢
腾讯2025实习生招聘
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务