1.Android åè§ãåå½¢ ImageView å®ç°
2.源码解析,缩缩放Glide加载GIF图的放源原理竟然这么简单
3.Android Notes|玩转 ShapeableImageView
4.ImageView设置backgroundåsrcçåºå«
Android åè§ãåå½¢ ImageView å®ç°
æ们è¦å®ç°çå¾çæ§ä»¶ç»§æ¿èª AppCompatImageView ï¼å®æ¯ ImageView çåç±»ï¼ä½æä¾äºæ´å¥½çå ¼å®¹æ§ï¼æ们å¨æ¤åºç¡ä¸æ·»å äºè¥å¹²èªå®ä¹çå±æ§åæ¹æ³ä»¥å®ç°æç»ç NiceImageView ï¼è¦å®åè§æè åå½¢çæ¾ç¤ºææï¼å°±æ¯å¯¹å¾çæ¾ç¤ºçå 容åºåè¿è¡âè£åªâï¼åªæ¾ç¤ºæå®çåºåå³å¯ãå¦ä½åå¢ï¼
ä¸ç§æ¯è¾ç´æ¥çåæ³æ¯è¿æ ·çï¼ç±äºå¾çæ¯è¢«ç»å¶å¨ç»å¸ä¸çï¼æä»¥ç¨ canvas ç clipPath() æ¹æ³å å°ç»å¸è£åªææå®å½¢ç¶ï¼è¿æ ·å°±è½è®©å¾çææå®å½¢ç¶æ¾ç¤ºäºï¼éæ° draw() æ¹æ³å³å¯ï¼
è¿æ ·ä½¿ç¨ src ã background å±æ§ç»ImageView设置æ¾ç¤ºçå¾çé½è½è¾¾å°é¢æçæ¾ç¤ºææãä½æ¯ç±äº clipPath() æ¹æ³ä¸æ¯ææé¯é½¿ï¼å¾çè¾¹ç¼ä¼æææ¾çæ¯ç³æï¼ä½éªå¹¶ä¸çæ³ï¼æ以éè¦å¯»æ¾å ¶å®æ¹æ³ã
å¦ä¸ç§æ¹æ³æ¯ä½¿ç¨å¾åç Alpha åæ模å¼ï¼å³
PorterDuffæ¥å®ç°ï¼ å®æ¹ææ¡£ ãè¿éæ们使ç¨å ¶ä¸çDST_IN模å¼ãæ´ä¸ªè¿ç¨å°±æ¯å ç»å¶ç®æ å¾åï¼ä¹å°±æ¯å¾çï¼åç»å¶åå¾åï¼å³ä¸ä¸ªåè§ç©å½¢æè åå½¢ï¼è¿æ ·æç»ç®æ å¾ååªæ¾ç¤ºååå¾åéåçåºåã
å°è¿éå°±å®ç°äºæ¾ç¤ºä¸ºåè§æè åå½¢äºãä½æ¯éè¦éè¿ src å±æ§æè 对åºçæ¹æ³æ¥è®¾ç½®å¾çï¼å¦åä¸è½è¾¾å°é¢æææã
ç»å¶è¾¹æ¡å°±ç¸å¯¹å®¹æç解äºï¼åªéè¦ç»å¶ä¸ä¸ªæå®æ ·å¼çåè§ç©å½¢æè åå½¢å³å¯ï¼
å½å¾çæ¾ç¤ºä¸ºåå½¢æ¶ï¼è¿å¯ä»¥ç»å¶ä¸ä¸ªå è¾¹æ¡ï¼ä½åè§ç©å½¢çè¯ç±äºåè§å¤§å°çé®é¢ï¼ç®ååªè½è®¾ç½®ä¸ä¸ªè¾¹æ¡å¯ã
ä½æ¯æ个é®é¢ï¼ç»å¶çè¾¹æ¡ä¼è¦çå¨å¾çä¸ï¼å¦æè¾¹æ¡å¤ªå®½ä¼å¯¼è´å¾ççå¯è§åºååå°äºï¼å½±åæ¾ç¤ºææï¼åè¿æ ·ï¼å·¦ä¸è§çè±çä¸è§äºï¼
é£ä¹å¦ä½è®©è¾¹æ¡ä¸è¦çå¨å¾çä¸å¢ï¼å¯ä»¥å¨ Alpha åæç»å¶åå å°ç»å¸ç¼©å°ä¸å®æ¯ä¾ï¼æååç»å¶è¾¹æ¡ï¼è¿æ ·é®é¢å°±è§£å³äºã
缩æ¾åçImageViewæ¾ç¤ºåºåç宽é«å°±æ¯å宽ãé«åå«åå»2åçè¾¹æ¡å®½åº¦ï¼è¿æ ·ç¼©å°çæ¯ä¾ä¹å°±æ¾èæè§äºãææå¦ä¸ï¼å·¦ä¸è§çè±çåºæ¥äºï¼
é®ç½©å¯ä»¥ç解为ä¸å±å¸¦éæ度çé¢è²ï¼é®ç½©é»è®¤ä¸ç»å¶ï¼å½å¶å®äºé®ç½©é¢è²æ¶æä¼ç»å¶ï¼å®ç°å¾ç®åï¼
ä¾å¦å ä¸ä¸ªéæ度%ç红è²é®ç½©åçææï¼
æ ¸å¿çå®ç°é»è¾å°±è¿äºäºï¼å©ä¸çå°±æ¯èªå®ä¹å±æ§åæ¹æ³äºï¼æå ´è¶£çå¯ä»¥çæºç ï¼é½å¾ç®åï¼å¸æå¯¹ä½ ææ帮å©å§ï¼
æ´å¤ç»èåç¨æ³è§GitHubï¼ /SheHuan/NiceImageView
å¦æä½ éè¦å®ç°ç±»ä¼¼ééçåå½¢ç»å头åï¼ä¾å¦ï¼
源码解析,Glide加载GIF图的缩缩放原理竟然这么简单
在探讨之前,让我们明确一点:Android的放源ImageView实际上并不支持直接加载GIF动图,因为ImageView基于Canvas绘制,缩缩放而Canvas仅支持drawBitmap一次绘制一张。放源垃圾分类系统源码那么,缩缩放Glide是放源如何巧妙地让ImageView展现出GIF动画的呢?
让我们从Glide的源码入手,今天的缩缩放主角是GifDrawable。这个类虽然有大约行代码,放源但理解其工作原理并非无迹可寻。缩缩放首先,放源我们注意到一个开始播放第一帧的缩缩放问道莫名辅助源码方法,这可能是放源入口点。
代码结构中,缩缩放当GIF有多帧时,会订阅特定事件。关键在于观察三句代码:一是递增帧位置,表明采用无限轮播算法;二是phperp管理系统源码加载资源回调,通过Target接口来触发;三是消息传递,用Handler进行控制。
在加载资源的回调中,我们看到消息机制在发挥作用。当接收到消息,会根据what参数进行处理。android 导入系统源码在handleMessage中,处理了延迟消息和清理消息。延迟消息会获取新帧数据并绘制到ImageView,同时清除旧帧,接着进入下一个帧的加载和清除过程。
总结来说,php unicode转换源码Glide加载GIF的原理相当直观:GIF被解析为一系列,通过无限轮播,每次新帧的加载都触发一次请求。在完成绘制后,旧帧会被清除,然后继续下一轮的加载。整个过程通过Handler的消息传递机制驱动循环播放。以上内容摘自Android轮子哥的分享。
Android Notes|玩转 ShapeableImageView
前言
在探索 Google 最新 Material Design 更新至 1.2.0 版本时,我留意到 ImageView 的更新,正好借此机会在重构过程中实践一番。若有不足之处,请各位多多指正。
GitHub 地址:...(此处省略链接)
最终效果展示:...(此处省略)
属性概览
cornerSize:控制图像的角半径大小。
cornerFamily:定义角的形状类型。
改进方向:期待更多反馈与学习交流。
ShapeableImageView 实操
官方说明指出,ShapeableImageView 提供了简洁的形状使用方法。
引入依赖:
1. 圆角
对应样式:...
2. 圆形
对应样式:...
3. 切角
对应样式:...
4. 菱形
对应样式:...
5. 右上角圆角
对应样式:...
6. 鸡蛋形状
对应样式:...
7. 组合弧度
对应样式:...
8. 小技巧应用
对应样式:...
番外篇 - 源码探索
通过 R 文件,我们可以查看 ShapeableImageView 所具有的属性。参考官方注释,并结合实践,能初步理解其功能。
进一步深入源码,获取当前版本提供的样式,例如:...
最后,通过方法调用获取对应边角的处理方式:...
期待更多高效实现方法的分享。
参考资料:
...ImageView设置backgroundåsrcçåºå«
ä»å¤©å¼åçæ¶åéå°ä¸ä¸ªå°é®é¢ï¼å¨ç»ä¸ä¸ªImageViewæ´æ¢å¾ççæ¶åï¼æ使ç¨çæ¯javaçæ¹å¼æ´æ¢ï¼ä½¿ç¨çæ¹æ³æ¯setBackgroundResourceï¼ï¼,ä½å¥æªçæ¯æ»æ¯æ²¡æææã
æåæ¥æåå æ¯ï¼æå¨ç¼åxmlæ件çæ¶åï¼ä¸ºäºæ¥çææï¼ç»è¿ä¸ªImageView设置äºsrcï¼è¿æ¶åå设置backgroundçæ¶åååçéå ã
解å³æ¹æ³ï¼å°xmlä¸çsrcå é¤å³å¯ã
é®é¢å»¶ä¼¸ï¼
ä¸ãImageView设置backgroundåsrcçåºå«ã
1.srcæ¯å¾çå 容ï¼åæ¯ï¼ï¼bgæ¯èæ¯ï¼å¯ä»¥åæ¶ä½¿ç¨ã
2.backgroundä¼æ ¹æ®ImageViewç»ä»¶ç»å®çé¿å®½è¿è¡æ伸ï¼èsrcå°±åæ¾çæ¯åå¾ç大å°ï¼ä¸ä¼è¿è¡æ伸 ã
3.scaleTypeåªå¯¹srcèµ·ä½ç¨ï¼bgå¯è®¾ç½®éæ度ã
äºãImageViewå ç§ä¸åç设置å¾ççæ¹å¼ã
设置backgroundï¼
1.image.setBackground(getResources().getDrawable(R.drawable.blackk));//åå½¢
2.image.setBackgroundResource(R.drawable.blackk);//åå½¢ 3.image.setBackgroundDrawable(getResources().getDrawable(R.drawable.blackk));////åå½¢
æºç ï¼è¿ä¸ç§æ¹æ³çå®è´¨é½æ¯è°ç¨æ¹æ³3setBackgroundDrawable()ã
设置src:
1.image.setImageDrawable(getResources().getDrawable(R.drawable.blackk)); //ä¸ä¼åå½¢
2.Stringpath=Environment.getExternalStorageDirectory()+File.separator+âtest1.jpgâ;
Bitmap bm = BitmapFactory.decodeFile(path);
image.setImageBitmap(bm);//ä¸ä¼åå½¢
3.image.setImageResource(R.drawable.blackk);//ä¸ä¼åå½¢
æºç ï¼ å ¶ä¸æ¹æ³2å°±æ¯å°bitmap转æ¢ä¸ºdrawableç¶åè°ç¨æ¹æ³1ï¼æ¹æ³1åæ¹æ³3é½æ¯è°ç¨updateDrawableï¼ï¼æ¹æ³ã