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"; } @Override protected 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); } @Override public 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) { // 停止 timer mTimer.mStop(); mTimer = null; mPressed = false; // 响应按钮动作 // Log.d("mylog", "........ button is pressed ........"); this.performClick(); // View类函数, 触发OnClickListener this.invalidate(); } }
"极星亲友定位": 简单实用,是一款适用于家人、朋友间的定位软件,实时查询对方的位置并以地图方式展示。非常适合用于家人间使用,少一份担心,多一份安全保证,能及时知道家人的去向,能避免找不到孩子、老人等情形。
(其实时性、自动特性,可以在很大程度上保证家人遇到危险时不掉链子)
不需要对方会使用智能手机,因为软件可以设置白名单自动回复,不需要对方作任何操作就能获取对方的位置。
不需要对方打开软件回复,也不需要事先启动软件。
下载位置:360市场(可以用360手机助手下载, 关键词“极星”,“极星亲友定位”)
- 双方只要安装了本软件,并打开了GPS功能(一般手机都已经打开了),即输入对方手机号、查询位置。
- 可以从通讯录中选择联系人,或从“最近联系人”菜单中直接选择。
- 白名单用于指定受信任的联系人,对他们的查询请求会自动回复。
- 集成地图展示功能,如果手机已经安装了百度地图软件,则可以在地图上展示对方的位置。
- 可以防止误操作:发送按钮采用延时反应设计,只有在按下约1秒后才算是确认发送,并以振动和文字提示您发送成功。
----------------------------------------------------------------------------------------------------------------------------------