安卓开发之自定义控件(三)
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
要在上面加广告,可以在暂停游戏的时候做点功夫
相关推荐
huha 2020-10-16
xfcyhades 2020-11-20
sgafdsg 2020-11-04
Michael 2020-11-03
fengyeezju 2020-10-14
ziyexiaoxiao 2020-10-14
业余架构师 2020-10-09
OuNuo0 2020-09-29
moses 2020-09-22
Angelia 2020-09-11
qinxu 2020-09-10
刘炳昭 2020-09-10
Nostalgiachild 2020-09-07
Nostalgiachild 2020-08-17
leavesC 2020-08-14
一青年 2020-08-13
AndroidAiStudy 2020-08-07
ydc0 2020-07-30
绿豆饼 2020-07-28