声明:原文来源于我的简书(dev晴天)文章“自带删除图标的DeleteImageView”

需求:我们在一些app上,特别是电商的app 上常见到 文字+图片评价。最多评论几张图片,等等的需求。此时你会发现有的图片右上角会有个删除图标(如下图)

点击图标图片会删除,本篇文章就粗略的来实现下此功能?

一 、实现思路

自定义控件

二 、具体实现(啥也不说了上代码?)

1、首先自定义View 类

/**
* Created by 晴天 on 2018/8/10
* <p>
* 带删除图标的ImageView
*/
public class DeleteImageView extends RelativeLayout {private ImageView mImg;private ImageView mIv_delete;public DeleteImageView(Context context) {this(context, null);}public DeleteImageView(Context context, AttributeSet attrs) {this(context, attrs, 0);}public DeleteImageView(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);LayoutInflater inflater = LayoutInflater.from(context);View view= inflater.inflate(R.layout.delete_view,this);mImg = view.findViewById(R.id.iv_img);mIv_delete = view.findViewById(R.id.iv_delete);}//向外部提供接口public ImageView getImg() {return mImg;}public void setDeleteListener(OnClickListener onClickListener){mIv_delete.setOnClickListener(onClickListener);}}
2、自定义view的xml布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"><ImageViewandroid:layout_margin="8dp"android:scaleType="center"android:id="@+id/iv_img"android:layout_width="match_parent"android:layout_height="match_parent" /><ImageViewandroid:id="@+id/iv_delete"android:layout_width="20dp"android:layout_height="20dp"android:layout_alignParentRight="true"android:src="@android:drawable/ic_delete"/></RelativeLayout>
3、主布局(用来显示添加的图片以及添加按钮)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="wrap_content"tools:context=".SecActivity"android:background="#cccccc"android:orientation="vertical"><HorizontalScrollViewandroid:background="#ffffff"android:layout_width="match_parent"android:layout_height="wrap_content"><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:padding="8dp"><LinearLayoutandroid:orientation="horizontal"android:id="@+id/ll_contain"android:layout_width="wrap_content"android:layout_height="match_parent" /><ImageButtonandroid:background="@null"android:id="@+id/ib_add_photo"android:layout_width="60dp"android:layout_height="60dp"android:src="@android:drawable/ic_input_add"/></LinearLayout></HorizontalScrollView></LinearLayout>
4、主activity的调用
public class SecActivity extends AppCompatActivity {private ImageButton mIbAddPhoto;private LinearLayout mLlContain;private int size = 0;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_sec);intiUI();}private void intiUI() {mIbAddPhoto = findViewById(R.id.ib_add_photo);mLlContain = findViewById(R.id.ll_contain);mIbAddPhoto.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {if (size >= 5) {Toast.makeText(SecActivity.this, "一次只能上传五张图片!!!", Toast.LENGTH_SHORT).show();return;}Intent intent = new Intent(Intent.ACTION_PICK);intent.setType("image/*");startActivityForResult(intent, 0);size++;}});}@Overrideprotected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {super.onActivityResult(requestCode, resultCode, data);if (resultCode == RESULT_OK) {Log.i("2333", "onActivityResult: " + data.getData());ContentResolver cr = this.getContentResolver();try {Bitmap bitmap = BitmapFactory.decodeStream(cr.openInputStream(data.getData()));final DeleteImageView deleteImageView = new DeleteImageView(SecActivity.this);deleteImageView.getImg().setImageBitmap(bitmap);LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(dip2px(SecActivity.this, 74),dip2px(SecActivity.this, 74));deleteImageView.setLayoutParams(params);mLlContain.addView(deleteImageView);deleteImageView.setDeleteListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {mLlContain.removeView(deleteImageView);size--;}});} catch (FileNotFoundException e) {e.printStackTrace();}}}/*转化工具*//*** 根据手机的分辨率从 dp 的单位 转成为 px(像素)*/public  int dip2px(Context context, float dpValue) {final float scale = context.getResources().getDisplayMetrics().density;return (int) (dpValue * scale + 0.5f);}/*** 根据手机的分辨率从 px(像素) 的单位 转成为 dp*/public  int px2dip(Context context, float pxValue) {final float scale = context.getResources().getDisplayMetrics().density;return (int) (pxValue / scale + 0.5f);}}

效果:

小结:

以前在公司实习时看到此处的实现便自己总结简略的实现了一下,总的来说知道了这种效果如何实现的,但是本文写的过为粗略,还有诸如图片的裁剪,内存大小控制的都没有去搞,布局UI也搞得比较丑将就的看吧?写这篇目的是为了简单的总结一下,以及为没见过此实现的童鞋们提供一个思路。立个flag等自己知识丰富了在搞个完善的。。。。。溜了!!!

自带删除图片的DeleteImageView简单实现相关推荐

  1. php删除上传图片,PHP上传图片、删除图片的简单示例代码

    本节内容: PHP上传图片.删除图片 1,php上传图片: 复制代码 代码示例: if (!empty($_FILES["img"]["name"])) { / ...

  2. WinFrm程序使用的图片展示控件.带删除的

    界面很简单.  新建一个用户控件. 然后再拖一个WebBrowser 控件. 边框什么的.通通为none 先上个使用后的效果图片 上代码 [System.Runtime.InteropServices ...

  3. HTML5期末大作业:奶茶网站设计——带音乐图片滚动奶茶(6页) 美食网页设计作业 简单大学生静态HTML网页作品

    HTML5期末大作业:奶茶网站设计--带音乐图片滚动奶茶(6页) 美食网页设计作业 简单大学生静态HTML网页作品 常见网页设计作业题材有 个人. 美食. 公司. 学校. 旅游. 电商. 宠物. 电器 ...

  4. 实现Java+Vue上传图片到七牛云和从七牛云删除图片

    环境准备 开发环境 后端: JDK1.8, SpringBoot2.2.2.RELEASE, Maven3.6.3 前端: vue-element-admin4.4.0 相关链接 七牛云JavaSDK ...

  5. python pdf删除图片_使用PyMuPdf提取、删除及替换PDF中的图片文件

    有时候想把PDF中的图片文件提取出来,身为程序员的我当然是自己写段代码来实现,先看看了网上的方法,都是逐行遍历,正则匹配来提取什么的,其实没有那么复杂,PyMuPdf官方文档里自带就有提取图片文件的方 ...

  6. TensorFlow与OpenCV,读取图片,进行简单操作并显示

    本文是OpenCV  2 Computer Vision Application Programming Cookbook读书笔记的第一篇.在笔记中将以Python语言改写每章的代码. PythonO ...

  7. 利用微信的weui框架上传、预览和删除图片

    jQuery WeUI 是专为微信公众账号开发而设计的一个框架,jQuery WeUI的官网:http://jqweui.com/ 需求:需要在微信公众号网页添加上传图片功能 技术选型:实现上传图片功 ...

  8. 七牛云删除图片接口_Thinkphp连接七牛云存储空间删除图片

    关于七牛云的基础知识不做介绍,建议先看看如何上传图片: 下面直接上代码:/** * 删除图片 * @return \think\response\Json */ public function del ...

  9. python pdf删除图片_【原创】python批量删除pdf图片水印(Xobject)的一种方法

    1.说明: 下载到的pdf总会有一些水印,pdf文件水印添加方式除了acrobat adobe自带的以外,还有很多,所以去除水印方法也很多,这里介绍的也只是一种适用python批量删除图片水印Xobj ...

最新文章

  1. win 安装Polygon
  2. 黑客用python还是ruby-Python、Ruby、Go语言哪个更值得学习?
  3. 方差分析的MATLAB实现(单因子)
  4. boost::geometry::detail::as_range用法的测试程序
  5. Python语法异常 Exception
  6. 《迷人的8051单片机》---3.2 语句
  7. STM32线缆综合测试系统
  8. wordpress去掉index.php,wordpress去掉url中index.php 创建分类目录404如何解决
  9. python怎么读取txt文件-python怎么读取txt文件内容
  10. Linux 软件写文件权限,Linux 文件和目录的读写执行权限详解
  11. Word设置默认粘贴格式,自动更改粘贴格式
  12. Python无法打开.xlsx文件:xlrd.biffh.XLRDError: Excel xlsx file; not supported
  13. 美国囤积零日漏洞的目的何在?
  14. 阿里云-印刷文字识别-营业执照识别
  15. 手把手教你写第一个C语言程序
  16. 刘强东呼吁大家帮一帮东北经济;滴滴“复活”小蓝单车;苹果股票评级遭下调丨价值早报
  17. 好用的磁碟重組工具 - UltimateDefrag
  18. 第30章 第7步到第10步:循环往复
  19. python元组:格式化字符串
  20. 汇编语言 -- 计时器/倒计时

热门文章

  1. paddle 图标注_机械制图:尺寸标注中最容易忽略的两个细节
  2. SecureCRT 9.1.0安装教程
  3. WEB前端大作业-简约风格装潢公司设计响应式网页模板(HTML JS CSS))
  4. @echo off 、@echo on、echo off、echo on之间的区别
  5. 决战白日门构建修改记录
  6. $.post html5,$.post(url,[data],[fn],[type])_jQuery之家-自由分享jQuery、html5、css3的插件库...
  7. Nacos 在 Apache APISIX API 网关中的服务发现实践
  8. OCS 2007 客户端标签定制及组策略应用
  9. jQuery.artDialog用法(弹窗)
  10. MyEclipse部署项目和jsp实现99乘法表