Android输入框带删除按钮的自定义View
2016-08-11 16:54
447 查看
废话不多说,用最少的代码来实现,记得弄一张名字叫 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); } }
相关文章推荐
- Android客户端之“微服私访”App的系统学习(七)XRecyclerView快速实现列表界面+自定义Search输入框,软键盘搜索按钮监听+TextView部分样式改变
- Android自定义View带有删除按钮的EditText
- Android学习自定义View(四)——继承控件(滑动时ListView的Item出现删除按钮)
- Android自定义View示例(一)—带有删除按钮的EditText
- Android进阶——自定义View之继承系统控件实现自带删除按钮动画效果和软键盘自动悬浮于文本框下方
- Android自定义View之有动画特效带清除按钮的输入框
- Android自定义View示例(一)—带有删除按钮的EditText
- android自定义view_ClearEditText带清空按钮的输入框
- Android学习自定义View(四)——继承控件(滑动时ListView的Item出现删除按钮)
- Android 自定义View--实现带有按钮点击效果的自动补全输入框(搜索框)
- Android自定义View示例(一)—带有删除按钮的EditText
- Android自定义View带有删除按钮的EditText
- Android自定义带删除按钮的输入框EditText
- 自定义searchview的编辑框,搜索按钮,删除按钮,光标等
- Android:自定义View实现随滑动由箭头变对勾的指示按钮
- Android开发自定义View之滑动按钮与自定义属性
- Android RecycleView 实现滑动删除按钮
- 自定义searchview的编辑框,搜索按钮,删除按钮,光标等
- Android自定义View------带删除功能的EditText
- Android 自定义View学习(3)--仿IOS风格滑动按钮