Android自定义Button [附一个例子吧]

来源:互联网 发布:wps数据透视表求和项 编辑:程序博客网 时间:2024/05/16 05:24


1. 不用再定义Listener
直接调用 performClick ,里面会调用View.OnClickListener

2. Drawable
资源里的真正图形资源,如png, gif等,在加载时实际上都是BitmapDrawable类型的对象。
mIconAccept = (BitmapDrawable)context.getResources()
    .getDrawable(R.drawable.latebutton_ok);
应该直接转换成BitmapDrawable对象,以便在canvas里可以直接drawBitmap

3. 图形的显示大小: 虽然图形可能是32*32,但在代码应该调用以下2个函数来获取长宽
mIconAccept.getIntrinsicWidth()
mIconAccept.getIntrinsicHeight()

4. 继承于Button应该会更方便

5. 使用已经存在的attribute
使用android:text属性来设置文本, 在代码用getAttributeValue()来获取。注意namespace要用全称。
    <com.friendlocation.LateButton
        android:id="@+id/lateButton1"
        android:layout_width="300dp"
        android:layout_height="36dp"
        android:text="查询" />

 public LateButton(Context context, AttributeSet attrs)
 {
  super(context, attrs);
  
  mText = attrs.getAttributeValue("http://schemas.android.com/apk/res/android", "text");
  if(mText == null) mText = "Default Text";
 }

6. 区分编辑状态
 public LateButton(Context context, AttributeSet attrs)
 {
  super(context, attrs);
  if(! this.isInEditMode())
  {
   mIconAccept = (BitmapDrawable)context.getResources()
    .getDrawable(R.drawable.latebutton_icon); 
  }
7. 显示所有属性
   for(int i=0; i<attrs.getAttributeCount(); i++)
   {
    String name = attrs.getAttributeName(i);
    String value = attrs.getAttributeValue(i);
    //Log.d("mylog",  "attr :" + name + "= " + value);
    if(name.equals("text"))
     mText = value;
   }

 

/* 只是一个例子,大家按照自己的需求修改  */public class LateButton extends Button{boolean   mPressed = false;MyHandler mHandler = new MyHandler();int       mProgress = 0;String  mText = "DefaultText";// 画图Paint mBgPaint = new Paint();Paint mTextPaint = new Paint(Paint.ANTI_ALIAS_FLAG);public LateButton(Context context, AttributeSet attrs){super(context, attrs);if(! this.isInEditMode()){}mText = attrs.getAttributeValue("http://schemas.android.com/apk/res/android", "text");if(mText == null) mText = "Default Text";}@Overrideprotected void onDraw(Canvas canvas){super.onDraw(canvas);int w = getWidth();int h = getHeight();Rect clientRect = new Rect(0,0,w,h);clientRect.inset(4,4);// 画背景mBgPaint.setColor(0xFFb0c4de);canvas.drawRoundRect(new RectF(clientRect), 4,4, mBgPaint);if(mPressed){...............}mTextPaint.setColor(0xFF444444);mTextPaint.setTextSize(28); mTextPaint.setTextAlign(Align.CENTER);canvas.drawText(mText, clientRect.centerX(), clientRect.centerY()+10, mTextPaint);}@Overridepublic boolean onTouchEvent(MotionEvent e){switch(e.getAction()){case MotionEvent.ACTION_DOWN:{onTapBegin(e.getX(), e.getY());break;}case MotionEvent.ACTION_UP:{onTapEnd(e.getX(), e.getY());break;}}return true;//return this.mDetector.onTouchEvent(event);}// 处理单击事件public void onTapBegin(float x, float y){mPressed = true;this.invalidate();}public void onTapEnd(float x, float y){// 停止 timermTimer.mStop();mTimer = null;mPressed = false;// 响应按钮动作// Log.d("mylog", "........ button is pressed ........");this.performClick(); // View类函数, 触发OnClickListenerthis.invalidate();}}

"极星亲友定位":  简单实用,是一款适用于家人、朋友间的定位软件,实时查询对方的位置并以地图方式展示。非常适合用于家人间使用,少一份担心,多一份安全保证,能及时知道家人的去向,能避免找不到孩子、老人等情形。

(其实时性、自动特性,可以在很大程度上保证家人遇到危险时不掉链子)

不需要对方会使用智能手机,因为软件可以设置白名单自动回复,不需要对方作任何操作就能获取对方的位置。
不需要对方打开软件回复,也不需要事先启动软件。

下载位置:360市场(可以用360手机助手下载, 关键词“极星”,“极星亲友定位”) 

- 双方只要安装了本软件,并打开了GPS功能(一般手机都已经打开了),即输入对方手机号、查询位置。
- 可以从通讯录中选择联系人,或从“最近联系人”菜单中直接选择。
- 白名单用于指定受信任的联系人,对他们的查询请求会自动回复。
- 集成地图展示功能,如果手机已经安装了百度地图软件,则可以在地图上展示对方的位置。
- 可以防止误操作:发送按钮采用延时反应设计,只有在按下约1秒后才算是确认发送,并以振动和文字提示您发送成功。

----------------------------------------------------------------------------------------------------------------------------------


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 1岁3个月宝宝牙齿发黑脱落怎么办 种植牙中央螺栓断在牙根里怎么办 欧联杯冠军已经获得欧冠资格怎么办 孩子该上学了学校不收怎么办 帮室友带东西她忘给钱怎么办? 鸿合录播系统不会自动跟踪了怎么办 小米2s锁屏密码忘了怎么办 想用中国驾照去美国开车怎么办? 5座的车坐7个人怎么办 海尔电视机的设置调乱了怎么办 老公弟兄两个有个偏心的婆婆怎么办 农商银行u盾密码忘了怎么办 不熟的表弟表妹向你借钱怎么办 开货车撞到人家房子了怎么办 坐骨被摔跤后好多年没好怎么办 自动挡汽车电子手刹刹车失灵怎么办 买家拍了不包邮的宝贝付款了怎么办 包邮快递买家不要了运费怎么办 舞蹈劈叉练出肌肉劈不下去怎么办 腰间盘突出压迫神经腿疼怎么办盘 绑定了我身份证的微信被盗了怎么办 用身份证办的手机卡不用了怎么办 平安陆金所交易密码忘了怎么办 陆金所密码交易密码忘记怎么办 带介指手指月肿了拿不下来怎么办 老公搞建筑的要长期在外地怎么办 媳妇跟婆婆吵架老公帮婆婆该怎么办 在家里礼佛香炉剩下的香头怎么办 精索曲张最近一打篮球就蛋疼怎么办 都两天了快递还是显示已发货怎么办 中通快递到达一天就是不派送怎么办 顺丰派送员把快递寄错了怎么办 顺丰快递把户籍卡弄丢了怎么办 金立手机不小心设置成英文了怎么办 三星手机不小心设置成英文了怎么办 手游方舟国际版渡渡鸟跟丢了怎么办 一打电话4g变2g怎么办 手机4g突然变2g怎么办 江湖风云录八卦门任务拒绝了怎么办 百度网盘下载时显示违规信息怎么办 在海马助手下载的游戏闪退怎么办