自定义一个字母Button

  1 package com.example.administrator.yunstore.widget;
  2
  3 import android.content.Context;
  4 import android.graphics.Canvas;
  5 import android.graphics.Color;
  6 import android.graphics.Paint;
  7 import android.graphics.Typeface;
  8 import android.util.AttributeSet;
  9 import android.view.MotionEvent;
 10 import android.widget.Button;
 11
 12 /**
 13  * Created by Administrator on 2016/10/19.
 14  * 自定义的一个字母button
 15  */
 16
 17 public class LetterButton extends Button {
 18
 19     // 分类字母
 20     private String[] assort = { "A", "B", "C", "D", "E", "F", "G",
 21             "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T",
 22             "U", "V", "W", "X", "Y", "Z" };
 23
 24     private Paint paint = new Paint();
 25
 26     private int selectIndex = -1;
 27
 28     public LetterButton(Context context) {
 29         super(context);
 30     }
 31
 32     public LetterButton(Context context, AttributeSet attrs) {
 33         super(context, attrs);
 34     }
 35
 36     public LetterButton(Context context, AttributeSet attrs, int defStyleAttr) {
 37         super(context, attrs, defStyleAttr);
 38     }
 39
 40     /**
 41      * @param canvas
 42      * 对按钮进行绘制
 43      */
 44     @Override
 45     protected void onDraw(Canvas canvas) {
 46         super.onDraw(canvas);
 47
 48         int height=getHeight();
 49         int width=getWidth();
 50         int interval = height / assort.length;
 51
 52         for (int i = 0, length = assort.length; i < length; i++) {
 53             // 抗锯齿
 54             paint.setAntiAlias(true);
 55             // 默认粗体
 56             paint.setTypeface(Typeface.DEFAULT_BOLD);
 57             // 白色
 58             paint.setColor(Color.BLUE);
 59             if (i == selectIndex) {
 60                 // 被选择的字母改变颜色和粗体
 61                 paint.setColor(Color.parseColor("#33bb99"));
 62                 paint.setFakeBoldText(true);
 63                 paint.setTextSize(30);
 64             }
 65             // 计算字母的X坐标
 66             float xPos = width / 2 - paint.measureText(assort[i]) / 2;
 67             // 计算字母的Y坐标
 68             float yPos = interval * i + interval;
 69             canvas.drawText(assort[i], xPos, yPos, paint);
 70             paint.reset();
 71         }
 72     }
 73
 74     @Override
 75     public boolean dispatchTouchEvent(MotionEvent event) {
 76         float y = event.getY();
 77         int index = (int) (y / getHeight() * assort.length);
 78         if (index >= 0 && index < assort.length) {
 79
 80             switch (event.getAction()) {
 81                 case MotionEvent.ACTION_MOVE:
 82                     // 如果滑动改变
 83                     if (selectIndex != index) {
 84                         selectIndex = index;
 85                         if (onTouch != null) {
 86                             onTouch.onTouchAssortListener(assort[selectIndex]);
 87                         }
 88
 89                     }
 90                     break;
 91                 case MotionEvent.ACTION_DOWN:
 92                     selectIndex = index;
 93                     if (onTouch != null) {
 94                         onTouch.onTouchAssortListener(assort[selectIndex]);
 95                     }
 96
 97                     break;
 98                 case MotionEvent.ACTION_UP:
 99                     if (onTouch != null) {
100                         onTouch.onTouchAssortUP();
101                     }
102                     selectIndex = -1;
103                     break;
104             }
105         } else {
106             selectIndex = -1;
107             if (onTouch != null) {
108                 onTouch.onTouchAssortUP();
109             }
110         }
111         invalidate();
112
113         return true;
114     }
115
116     @Override
117     public boolean onTouchEvent(MotionEvent event) {
118         return super.onTouchEvent(event);
119     }
120     //字母监听器
121     private OnTouchAssortListener onTouch;
122
123     public interface OnTouchAssortListener {
124          void onTouchAssortListener(String s);
125           void onTouchAssortUP();
126     }
127
128
129     public void setOnTouchAssortListener(OnTouchAssortListener onTouch) {
130         this.onTouch = onTouch;
131     }
132 }
时间: 2024-10-04 18:30:40

自定义一个字母Button的相关文章

使用CAShapeLayer和UIBezierPath画一个自定义半圆弧button

通常我们使用系统自带的UIButton时,一般都是Rect矩形形式的,或则美工给出一张半圆弧的按钮,如图为一张半圆加三角形的按钮,而此时,如果给按钮添加点击事件时,响应事件依然为矩形区域,不符合我们的需求: 本文为解决这样的按钮问题: 如下图:使用CAShapeLayer和UIBezierPath画了一个button,这个按钮由一个半圆弧和三角形构成,现在我们需要点击黄颜色区域时,响应按钮点击事件,弹出对话框,其他白色区域,不响应点击事件: 第一步: 如下图,自定义一个类,CustomButto

ExtJs5_继承自定义一个控件

Extjs的开发都可以遵循OOP的原则,其对类的封装也很完善了.自定义一个控件最简单的办法就是继承一个已有的控件.根据上一节的需要,我做了一个Button的子类.首先根据目录结构,在app目录下建立一个ux目录,将自定义控件都放在这个目录下.在ux目录下建立一个文件ButtonTransparent.js. /** * 定义了一个背景透明的Button类,继承于Button */ Ext.define('app.ux.ButtonTransparent', { extend : 'Ext.but

自定义navigationItem与button的几种状态

self.navigationItem.rightBarButtonItem = [UIBarButtonItem alloc] initWithCustomView:button]; 前提要创建一个UIButton *button:button的内容(图片.颜色等)可以自定义. 这样就实现了自定义navigationItem的rightBarButtonItem或者leftBarButtonItem的自定义了. button的状态设置参考: [button setTitle:@"按钮"

跟我一起学extjs5(07--继承自定义一个控件)

跟我一起学extjs5(07--继承自定义一个控件) Extjs的开发都可以遵循OOP的原则,其对类的封装也很完善了.自定义一个控件最简单的办法就是继承一个已有的控件.根据上一节的需要,我做了一个Button的子类.首先根据目录结构,在app目录下建立一个ux目录,将自定义控件都放在这个目录下.在ux目录下建立一个文件ButtonTransparent.js. /** * 定义了一个背景透明的Button类,继承于Button */ Ext.define('app.ux.ButtonTransp

iOS 为自定义tableView添加button点击事件后获取其序号

在自定义tableView中,为cell添加button点击事件后,如何获取其对应的序号? 1.创建tableView: 先创建一个成员变量: @interface MyCameraViewController ()<UITableViewDelegate,UITableViewDataSource> { UITableView *_tableView; }@end 在viewDidLoad中初始化 _tableView = [[UITableView alloc] initWithFrame

自定义一个类加载器

http://www.cnblogs.com/xrq730/p/4847337.html 为什么要自定义类加载器 类加载机制:http://www.cnblogs.com/xrq730/p/4844915.html 类加载器:http://www.cnblogs.com/xrq730/p/4845144.html 这两篇文章已经详细讲解了类加载机制和类加载器,还剩最后一个问题没有讲解,就是 自定义类加载器.为什么我们要自定义类加载器?因为虽然Java中给用户提供了很多类加载器,但是和实际使用比起

自定义一个处理图片的HttpHandler

有时项目里我们必须将图片进行一定的操作,例如水印,下载等,为了方便和管理我们可以自定义一个HttpHander 来负责这些工作 后台: public class ImageHandler : IHttpHandler { #region IHttpHandler Members public bool IsReusable { get { return true; } } /// <summary> /// 实现IHTTPHandler后必须实现的方法 /// </summary>

Android自定义一个属于自己的时间钟表

1.概述 本文主要讲解的是如何自定义一个时间钟表,通过简单的练习可以简单学习android当中自定义view的一些常用绘图技巧,优化android绘图操作.言归正传,首先看下我们需要实现的效果: 当我们看到这个效果的时候脑子里应该有一定的思路了,我们应该把它分解成以下几个步骤: 1.仪表盘(圆) 2.刻度线(长 中 短) 3.刻度值(1-12) 4.指针(时  分  秒) 5.移动指针,计算指针位置 现在我们已经很清楚自己的思路了,那么我们一个一个来. 第一步:1.自定义View的属性,首先在r

3、从键盘上接收一个字母,判断是否是大写字母,如果是则转换成小写字母输出

3.从键盘上接收一个字母,判断是否是大写字母,如果是则转换成小写字母输出,否则直接输出 #include <stdio.h>void main(){   char x=0;    printf("请输入一个字母:");    scanf("%c",&x);    x>=65&&x<=90? printf("小写字母为:%c",x+32): printf("%c",x);    p