首页 > 系统 > Android > 正文

Android中自定义ImageView添加文字设置按下效果详解

2019-12-12 02:12:19
字体:
来源:转载
供稿:网友

前言

我们在上一篇文章教大家使用ImageView+TextView的组合自定义控件...可能在开发中你还需要其他功能,例如:按下效果,可以在代码中改变字体颜色,更换图片等等...

首先上效果图,看看是否是你需要的


效果图

下面开始撸代码

MyImageTextView.java

public class MyImageTextView extends LinearLayout { private ImageView mImageView = null; private TextView mTextView = null; private int imageId, pressImageId; private int textId, textColorId, textTopId, pressTextColorId; public MyImageTextView(Context context) {  this(context, null); } public MyImageTextView(Context context, @Nullable AttributeSet attrs) {  this(context, attrs, 0); } public MyImageTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {  super(context, attrs, defStyleAttr);  this.setOrientation(LinearLayout.VERTICAL);//设置垂直排序  this.setGravity(Gravity.CENTER);//设置居中  if (mImageView == null) {   mImageView = new ImageView(context);  }  if (mTextView == null) {   mTextView = new TextView(context);  }  if (attrs == null)   return;  int count = attrs.getAttributeCount();  for (int i = 0; i < count; i++) {   String attrName = attrs.getAttributeName(i);//获取属性名称   //根据属性获取资源ID   switch (attrName) {    //显示的图片    case "image":     imageId = attrs.getAttributeResourceValue(i, 0);     break;    //按下时显示的图片    case "pressImage":     pressImageId = attrs.getAttributeResourceValue(i, 0);     break;    //显示的文字    case "text":     textId = attrs.getAttributeResourceValue(i, 0);     break;    //设置文字颜色    case "textColor":     textColorId = attrs.getAttributeResourceValue(i, 0);     break;    //设置文字距离上面图片的距离    case "textTop":     textTopId = attrs.getAttributeResourceValue(i, 0);     break;    //按下时显示的文字颜色    case "pressTextColor":     pressTextColorId = attrs.getAttributeResourceValue(i, 0);     break;   }  }  init(); } /**  * 初始化状态  */ private void init() {  this.setText(textId);  mTextView.setGravity(Gravity.CENTER);//字体居中  this.setTextColor(textColorId);  this.setTextPaddingTop(textTopId);  this.setImgResource(imageId);  addView(mImageView);//将图片加入  addView(mTextView);//将文字加入 } @Override public boolean onTouchEvent(MotionEvent event) {  int action = event.getAction();  switch (action) {   //按下   case MotionEvent.ACTION_DOWN:    if (pressImageId != 0)     this.setImgResource(pressImageId);    if (pressTextColorId != 0)     this.setTextColor(pressTextColorId);    break;   //移动   case MotionEvent.ACTION_MOVE:    break;   //抬起   case MotionEvent.ACTION_UP:    if (imageId != 0)     this.setImgResource(imageId);    if (textColorId != 0)     this.setTextColor(textColorId);    break;  }  return super.onTouchEvent(event); } /**  * 设置默认的图片  *  * @param resourceID 图片id  */ public void setImgResourceDefault(int resourceID) {  imageId = resourceID;  setImgResource(resourceID); } /**  * 设置按下的图片  *  * @param resourceID 图片id  */ public void setImgResourcePress(int resourceID) {  pressImageId = resourceID; } /**  * 设置显示的图片  *  * @param resourceID 图片ID  */ private void setImgResource(int resourceID) {  if (resourceID == 0) {   this.mImageView.setImageResource(0);  } else {   this.mImageView.setImageResource(resourceID);  } } /**  * 设置显示的文字  *  * @param text  */ public void setText(int text) {  this.mTextView.setText(text); } /**  * 设置字体颜色(默认为黑色)  *  * @param color  */ private void setTextColor(int color) {  if (color == 0) {   this.mTextView.setTextColor(Color.BLACK);  } else {   this.mTextView.setTextColor(getResources().getColor(color));  } } /**  * 设置默认的颜色  *  * @param color 颜色ID  */ public void setTextDefaultColor(int color) {  textColorId = color;  setTextColor(color); } /**  * 设置按下的颜色  *  * @param color 颜色ID  */ public void setTextPressColor(int color) {  pressImageId = color; } /**  * 设置字体大小  *  * @param size  */ public void setTextSize(float size) {  this.mTextView.setTextSize(size); } /**  * 设置文字与上面的距离  * @param top  */ public void setTextPaddingTop(int top) {  if (top != 0)   this.mTextView.setPadding(0, getResources().getDimensionPixelOffset(top), 0, 0); }}

下面是属性文件

image_text.xml

<?xml version="1.0" encoding="utf-8"?><resources> <declare-styleable name="imageText">  <attr name="image" format="integer" />  <attr name="pressImage" format="integer" />  <attr name="text" format="integer" />  <attr name="textColor" format="integer" />  <attr name="pressTextColor" format="integer" />  <attr name="textTop" format="integer" /> </declare-styleable></resources>

属性文件存放位置如下图


文件位置

下面我们来看看具体的调用方法


布局调用

当然我们也可以在Activity中进行再次设置, 例如:


在java中设置

这些都是在自定义View中的set方法...也可以根据具体的业务增删set方法.

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对武林网的支持。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表