题记:写这篇博客要主是加深自己对控件事件的认识和总结现实算法时的一些验经和训教,如果有错误请指出,万分感谢。
在android中可以利用android自身所带的控件按照自己的愿意停止组合、修改,到达意满果效。
这个例子是个单简的自义定控件的例子,只是承继android自身的Button控件,定绑监听器并在得获核心时在外围用画笔画出外框。若想在Button中添加其他事件或添加其他果效,也可以此类推。
首先是Mainactivity.java:
package com.example.mybutton; import android.os.Bundle; import android.app.Activity; import android.view.Menu; public class MainActivity extends Activity { public MyButton mybutton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mybutton = (MyButton)findViewById(R.id.mybutton); } }
在Mainactivity中只是单简的义定了一个自义定的MyButton控件。
承继Button的MyButton:
package com.example.mybutton; import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Paint.Style; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class MyButton extends Button implements OnClickListener{ Paint paint; boolean paintflag; public MyButton(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub paint = new Paint(); paint.setStyle(Style.STROKE); paint.setStrokeWidth(2); getPaint().setColor(110); //用采rgb式形的整数置设颜色 setOnClickListener(this); //定绑监听器事件 paintflag = false; } @Override public void onClick(View v) { // TODO Auto-generated method stub // paintflag = true; // invalidate(); //刷新绘画 System.out.println("===============click"); } @Override public boolean onTouchEvent(MotionEvent event) { //触摸事件 // TODO Auto-generated method stub System.out.println("===============touch"); switch (event.getAction()) { case MotionEvent.ACTION_UP: paintflag = false; invalidate(); break; case MotionEvent.ACTION_DOWN: paintflag = true; case MotionEvent.ACTION_CANCEL: invalidate(); break; } return super.onTouchEvent(event); } @Override protected void onDraw(Canvas canvas) { // TODO Auto-generated method stub super.onDraw(canvas); if(paintflag){ drawfocus(canvas); } else{ drawnofocus(canvas); } } private void drawnofocus(Canvas canvas){ paint.setColor(0); canvas.drawRect(1, 1, getWidth() - 1, getHeight() - 1, paint); } private void drawfocus(Canvas canvas){ int alpha = 255; int color = 255 | (alpha << 24); //此处色采值为FF0000FF,前俩表现透明度(0为透明,FF为不透明),前面的表现RGB颜色 paint.setColor(color); canvas.drawRect(1, 1, getWidth() - 1, getHeight() - 1, paint); } }
在这里只现实了俩功能:定绑Button的监听器和在onTouchEvent事件中利用画笔画出外框或擦去外框。
最后是布局文件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" > <com.example.mybutton.MyButton android:id="@+id/mybutton" android:layout_width="200dp" android:layout_height="200dp" android:focusable="true" /> </RelativeLayout>
在布局文件中可以应用自义定的MyButton控件。这里是包名com.example.mybutton和类名(即自义定的控件名)组合而成。
文章结束给大家分享下程序员的一些笑话语录:
IBM和波音777
波音777是有史以来第一架完全在电脑虚拟现实中设计制造的飞机,所用的设备完全由IBM公司所提供。试飞前,波音公司的总裁非常热情的邀请IBM的技术主管去参加试飞,可那位主管却说道:“啊,非常荣幸,可惜那天是我妻子的生日,So..”..
波音公司的总载一听就生气了:“胆小鬼,我还没告诉你试飞的日期呢!”