当前位置: 代码迷 >> Android >> 安卓开发之自定义控件(3)
  详细解决方案

安卓开发之自定义控件(3)

热度:71   发布时间:2016-04-28 06:56:15.0
安卓开发之自定义控件(三)

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



?

要在上面加广告,可以在暂停游戏的时候做点功夫



?

1 楼 什么世道 2014-01-28  
狂拽霸炫叼炸天.
  相关解决方案