Android输入框带删除按钮的自定义View
来源:互联网 发布:qt多线程编程 编辑:程序博客网 时间:2024/05/22 06:17
废话不多说,用最少的代码来实现,记得弄一张名字叫 common_ic_delete 做完删除的图到drawable里。
package com.aiitec.widgets;import android.content.Context;import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.Paint;import android.graphics.drawable.BitmapDrawable;import android.graphics.drawable.Drawable;import android.text.TextUtils;import android.util.AttributeSet;import android.view.MotionEvent;import android.widget.EditText;/** * @author Anthony * @createTime 2016-06-20 * 带删除按钮的输入框,点击X就删除文字,并提供一个删除监听接口 * */public class DeleteEditText extends EditText { private int padding, drawablePadding; private Bitmap deleteImg ; private int deleteX, deleteY, deleteW, deleteH; public DeleteEditText(Context context){ super(context); init(); } public DeleteEditText(Context context, AttributeSet attrs){ super(context, attrs); init(); } public DeleteEditText(Context context, AttributeSet attrs, int defStyleAttr){ super(context, attrs, defStyleAttr); init(); } private void init(){ padding = dip2px(getContext(), 4); drawablePadding = dip2px(getContext(), 8); int backgroundRec = getResources().getIdentifier("common_ic_delete", "drawable", getContext().getPackageName()); if (backgroundRec > 0) { Drawable drawable = getResources().getDrawable(backgroundRec); deleteImg = ((BitmapDrawable) drawable).getBitmap(); } } public void setPadding(int padding) { this.padding = padding; } public void setDrawablePadding(int drawablePadding) { this.drawablePadding = drawablePadding; } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); if(!TextUtils.isEmpty(getText().toString().trim()) && deleteImg != null){ int x = getWidth() - deleteImg.getWidth()- drawablePadding-padding; int y = (getHeight() - deleteImg.getHeight())>>1; //删除按钮区域比,按钮大4dp deleteX = x-padding; deleteW = x + deleteImg.getWidth() + padding; deleteY = y - padding; deleteH = y + deleteImg.getHeight() + padding; Paint paint = new Paint(); canvas.drawBitmap(deleteImg, x, y, paint); } } private long downTime ; @Override public boolean dispatchTouchEvent(MotionEvent event) { switch(event.getAction()){ case MotionEvent.ACTION_DOWN: downTime = System.currentTimeMillis(); break; case MotionEvent.ACTION_UP: long upTime = System.currentTimeMillis(); if(upTime-downTime < 500 ){ //短按才算,长按不算 if(event.getX() > deleteX && event.getX()<deleteW && event.getY() > deleteY && event.getY()<deleteH){ //点击删除按钮区域 setText(""); if(onDeleteListener != null){ onDeleteListener.onDelete(); } } } break; } return super.dispatchTouchEvent(event); } private OnDeleteListener onDeleteListener; public void setOnDeleteListener(OnDeleteListener onDeleteListener) { this.onDeleteListener = onDeleteListener; } /** * 删除按钮监听接口 */ public interface OnDeleteListener{ void onDelete(); }; public static int dip2px(Context context, float dpValue) { float scale = context.getResources().getDisplayMetrics().density; return (int)(dpValue * scale + 0.5F); }}
1 0
- Android输入框带删除按钮的自定义View
- Android自定义带删除按钮的输入框EditText
- Android自定义View之有动画特效带清除按钮的输入框
- 自定义控件-带删除按钮的输入框
- [Android]自定义带删除输入框
- Android自定义Dialog带分隔的8位输入框按钮回调输入值
- 自定义View之自定义EditText带删除内容按钮控件
- Android自定义View带有删除按钮的EditText
- android自定义控件(组合控件)--带删除按钮的EditText
- Android自定义右边带删除按钮的EditText
- android带删除按钮的编辑框
- Android自定义View------带删除功能的EditText
- Android自定义View-带删除和搜索图标的EditText
- Android EditText 自定义带删除按钮
- Android自定义控件开发系列(二)——带清除按钮的圆角输入框
- 自定义带删除按钮的EditText搜索框
- 自定义带删除按钮的EditText
- 自定义带删除按钮的EditText
- Linux下Lamp.Lnmp环境 PHP使用Redis安装教程
- UIWebview JS和OC相互调用
- 一个礼拜学习指针的总结: 变量和二维数组
- c#调用matlab脚本
- 【转】SQL Server游标的使用
- Android输入框带删除按钮的自定义View
- 【NOIP提高】钱仓
- 《构建之法》读书笔记——第8章 需求分析
- function-a(){}与var-b-=-function(){}的区别
- 图片上水印文字
- Product Roadmap August 2016
- 前华人首富李嘉诚错了,商业全变了!
- 谈谈Parser --王垠
- Android 常见的几种加密方式RSA、CBC的集成