1.自定义EditText
?例如上面这个有下划线的EditText,就是自定义的
?
/** * 自定义EditText * @author tanlvxu * */public class MyEditText extends EditText { private static final int SEG_CNT = 9;//总的下划线,上图所示9个 private static final int SEG_GAP_WIDTH = 2;//每个下划线的间距2 /** *必须重写两个构造方法 */ public MyEditText(Context context, AttributeSet attrs) { super(context, attrs); } public MyEditText(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); }// public MyEditText(Context context) {// super(context);// } /** * 要改变其外形,重写其onDraw()方法,改变其点击事件,重写其onClick等方法 */ @Override public void onDraw(Canvas canvas) { Paint paint = new Paint(); paint.setColor(Color.WHITE); paint.setStyle(Style.FILL); int height = getHeight();//获取父件高度 int width = getWidth();//获取父件宽度 int segLength = (width + SEG_GAP_WIDTH)/SEG_CNT - SEG_GAP_WIDTH;//求得每一根下滑线的长度 for(int i = 0; i < SEG_CNT; i++) { canvas.drawRect(i * (segLength + SEG_GAP_WIDTH), height -1 , i * (segLength + SEG_GAP_WIDTH) + segLength, height, paint); } }}
?在xml对应的布局中
?
?
<com.example.guseewho.MyEditText android:background="#00000000" android:ems="10" android:textColor="#FFFFFFFF" > </com.example.guseewho.MyEditText>
?? 要把它的背景设置成透明,#00000000
?
? ?前两个0是透明度00到ff,从透明到不透明
? ?后面6个0对应的是RGB值.具体可以参照比色表.
? ? ??http://www.wahart.com.hk/rgb.htm
?
2.自定义SurfaceView
?
?做这个游戏的时候,查了很多资料,把surfaceView放在xml上比直接显示要好些.
并且能够加任意控件.
?
/** * 自定义SurfaceView * @author tanlvxu * */public class MySurfaceView extends SurfaceView implements SurfaceHolder.Callback,Runnable { private SurfaceHolder surfaceHolder ;//控制器 /** * 要放入布局中,必须实现其两个参数的构造方法 * @param context * @param attrs */ public MySurfaceView(Context context, AttributeSet attrs) { super(context, attrs); surfaceHolder = getHolder(); surfaceHolder.addCallback(this); /** * Canvas canvas = surfaceHolder.lockCanvas() ; //锁定屏幕,获取画布 * surfaceHolder.unlockCanvasAndPost(canvas) ;//传递画布,开始绘画 */ } @Override public void run() { /** * 刷新画布 */ } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { // TODO Auto-generated method stub } /** * 创建时调用该方法 */ @Override public void surfaceCreated(SurfaceHolder holder) { // TODO Auto-generated method stub /** * 线程在这启动 * 通过getHeight() ; getWidth();获取其控件的大小 */ } @Override public void surfaceDestroyed(SurfaceHolder holder) { // TODO Auto-generated method stub /** * 可以在这里关闭线程 */ }}
? 再Activity中的setContentView();方法之后再取得该组件,不然会报空指针异常
?
?
在xml中:
?
<com.example.view.GameView android:id="@+id/MySurfaceView" android:layout_width="自己定义" android:layout_height="自己定义"></com.example.view.GameView>
?
?
要更好的控制游戏的存储与读取,可以加个Dialog
?
要在上面加广告,可以在暂停游戏的时候做点功夫
?