重温Android自定义控件,选择自定义一个类spinner,别眨眼:
先来看看效果
一:首先是自定义属性
1.在res/values下创建一个attrs.xml文件,在里面定义属性
2.文件如下:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="CustomSpinner">
<attr name="defaultShowItem" format="integer"/> <!-- 默认展示第几条 -->
<attr name="CustomSpinnerBackground" format="reference|color"/> <!-- 自定义spinner的背景,引用或者颜色类型,就是说可以用R.drawable.xxxx也可以用#aaff0000 -->
<attr name="CustomSpinnerTextColor" format="reference|color"/> <!-- 自定义spinner的item字体颜色 -->
<attr name="CustomSpinnerTextSize" format="dimension"/> <!-- 自定义spinner的item的字体大小 -->
<attr name="HaveLeftIcon" format="boolean"/> <!-- 是否需要左图标 -->
<!-- <attr name="LeftIconImage" format="reference"/> --> <!-- 左图标图片 -->
<attr name="LeftIconWidth" format="dimension"/> <!-- 左图标的宽 -->
<attr name="LeftIconHeight" format="dimension"/> <!-- 左图标的高 -->
<attr name="LeftIconMarginLeft" format="dimension"/> <!-- 左图标距左边的空间 -->
<attr name="android:layout_width"/> <!-- 当我们也需要设置控件的宽高的时候,通常会使用layout_width属性,这是系统自带的,但是系统并没有提供android.R.styleable.xxxxx的形式让我们获取系统属性的值,那么这个时候就要用这样的方式来设置了,这种方式可以和系统属性一样设置layout_width,没有区别 -->
<attr name="android:layout_height"/> <!-- 与系统一致 -->
</declare-styleable>
</resources>
二:自定义spinner类,使用注释详解了
package com.jeska.mvpdemo.customview;
import com.jeska.mvpdemo.R;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.Context;
import android.content.res.ColorStateList;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Paint.Align;
import android.graphics.PixelFormat;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.util.TypedValue;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.RadioButton;
import android.widget.TextView;
import android.widget.Toast;
public class CustomSpinner extends View {
/**
* 是否已经设置了内容
* */
private boolean haveSetContent = false;
/**
* 密度
* */
private float density;
/**
* 当前显示的内容
* */
private String currentContent = "";
private Context mContext;
/**
* 公用画笔
* */
private Paint mPaint = null;
/**
* items的展示文字
* */
private String[] texts = null;
/**
* 左图标的图片集合
* */
private int[] leftIconImages = null;
/**
* 控件的高