1.自定义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
要在上面加广告,可以在暂停游戏的时候做点功夫