
Android使用代码动态创建Selector(网络图片)
发布日期:2021-07-19 12:29:41
浏览次数:9
分类:技术文章
本文共 4287 字,大约阅读时间需要 14 分钟。
有时候我们需要从网络下载图片,并动态替换本地的图片,典型的场景就是替换tab上的图片。
这里使用Glide加载图片,允许第一次加载慢,往后就采用缓存加载,无延迟,代码如下
有一点需要大家注意的地方,那就是在drawable.addState添加状态的时候,要注意先添加选中状态的图片,其次才是未选中的状态,和shape添加选择器一样的。
延伸:提供一个动态生成selector 的工具类 ,代码如下
/** * 动态设置 点击事件 selector 的工具类 可以从本地添加 也可以从网络添加 * Created by suwenlai on 16-12-26. */ public class SelectorUtil { /** * 从 drawable 获取图片 id 给 Imageview 添加 selector * @param context 调用方法的 Activity * @param idNormal 默认图片的 id * @param idPress 点击图片的 id * @param iv 点击的 view */ public static void addSelectorFromDrawable(Context context , int idNormal, int idPress,ImageView iv){ StateListDrawable drawable = new StateListDrawable(); Drawable normal = context.getResources().getDrawable(idNormal); Drawable press = context.getResources().getDrawable(idPress); drawable.addState(new int[]{android.R.attr.state_pressed},press); drawable.addState(new int[]{-android.R.attr.state_pressed},normal); iv.setBackgroundDrawable(drawable); } /** * 从 drawable 获取图片 id 给 Button 添加 selector * @param context 调用方法的 Activity * @param idNormal 默认图片的 id * @param idPress 点击图片的 id * @param button 点击的 view */ public static void addSelectorFromDrawable(Context context , int idNormal, int idPress,Button button){ StateListDrawable drawable = new StateListDrawable(); Drawable normal = context.getResources().getDrawable(idNormal); Drawable press = context.getResources().getDrawable(idPress); drawable.addState(new int[]{android.R.attr.state_pressed},press); drawable.addState(new int[]{-android.R.attr.state_pressed},normal); button.setBackgroundDrawable(drawable); } /** * 从网络获取图片 给 ImageView 设置 selector * @param clazz 调用方法的类 * @param normalUrl 获取默认图片的链接 * @param pressUrl 获取点击图片的链接 * @param imageView 点击的 view */ public static void addSeletorFromNet(final Class clazz, final String normalUrl, final String pressUrl, final ImageView imageView){ new AsyncTask(){ @Override protected Drawable doInBackground(Void... params) { StateListDrawable drawable = new StateListDrawable(); Drawable normal = loadImageFromNet(clazz,normalUrl); Drawable press = loadImageFromNet(clazz, pressUrl); drawable.addState(new int[]{android.R.attr.state_pressed},press); drawable.addState(new int[]{-android.R.attr.state_pressed},normal); return drawable; } @Override protected void onPostExecute(Drawable drawable) { super.onPostExecute(drawable); imageView.setBackgroundDrawable(drawable); } }.execute(); } /** * * 从网络获取图片 给 Button 设置 selector * @param clazz 调用方法的类 * @param normalUrl 获取默认图片的链接 * @param pressUrl 获取点击图片的链接 * @param button 点击的 view */ public static void addSeletorFromNet(final Class clazz, final String normalUrl, final String pressUrl, final Button button){ new AsyncTask (){ @Override protected Drawable doInBackground(Void... params) { StateListDrawable drawable = new StateListDrawable(); Drawable normal = loadImageFromNet(clazz,normalUrl); Drawable press = loadImageFromNet(clazz, pressUrl); drawable.addState(new int[]{android.R.attr.state_pressed},press); drawable.addState(new int[]{-android.R.attr.state_pressed},normal); return drawable; } @Override protected void onPostExecute(Drawable drawable) { super.onPostExecute(drawable); button.setBackgroundDrawable(drawable); } }.execute(); } /** * 从网络获取图片 * @param clazz 调用方法的类 * @param netUrl 获取图片的链接 * @return 返回一个 drawable 类型的图片 */ private static Drawable loadImageFromNet(Class clazz, String netUrl) { Drawable drawable =null; try { drawable = Drawable.createFromStream(new URL(netUrl).openStream(), "netUrl.jpg"); } catch (IOException e) { MyLog.e(clazz.getName(),e.getMessage()); } return drawable; }}
转载地址:https://blog.csdn.net/jdsjlzx/article/details/90449546 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
哈哈,博客排版真的漂亮呢~
[***.90.31.176]2023年09月04日 13时00分30秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Mac、移动端的抓包方式和注意事项——Charles
2019-03-07
Unity资源管理和策略
2019-03-07
番茄工作法——总结笔记
2019-03-07
Redux 源码共读 -- 2
2019-03-07
Redux 源码共读 -- 1
2019-03-07
使用 nodeJs 实现 js/ts 文件翻译功能
2019-03-07
图片添加水印、文件转图片、图片转文件、html2canvas截屏功能
2019-03-07
React技术1-集成react router
2019-03-07
高德地图基础使用教程(附demo)
2019-03-07
使用 node 和 socket 实现在线聊天室
2019-03-07
设置定时器和清除定时器的最佳方案
2019-03-07
Element-ui 对话框el-dialog点击关闭事件处理
2019-03-07
前端通过Vue自己实现输入框模糊筛选数据,并将筛选结果展示
2019-03-07
Vue实现移动端APP的方格布局横向滑动翻页带滚动条
2019-03-07
Vue.js页面跳转后返回上一页面记录上一页面select选定的值
2019-03-07
Mybatis-Plus实现分页
2019-03-07
踩坑记录(四)本地连接服务器宝塔面板数据库连不上去
2019-03-07
踩坑记录(五) 时间戳出问题
2019-03-07
Docker简介与安装
2019-03-07
Docker常用命令
2019-03-07