菜鸟的安卓实习之路----android控件自己做

android控件满足不了我们的需求,怎么办?自己做吧,提供两种方法,一种是组合andoird现有控件,另重视继承View 自己去画。当然第二种稍微麻烦点。

1 组合控件

先说第一种吧:举个最简单的例子,就是刚做的一个电池控件

1 先定一个.battery_layout.xml  里面上下排布一个imageVIew 和一个TextView,

2 顶一个Battery类, this.layoutInflater = layoutInflater.from(context);
        layoutInflater.inflate(R.layout.battery_layout, this);

3 在类中天上你想要操作这个电池控件的代码,搞定,及时这么简单

注意: 当在java中获取xml中已经定义好的空间的时候,可以不用new 来初始化,直接findviewbyId()        

    batteryImg = (ImageView)findViewById(R.id.battery);
   powerText = (TextView)findViewById(R.id.power);



2 控件自己画:

另一种就是提供现有的东西连组合都不能组合了,自己画吧,没法了

看看之前画的标尺控件吧,这需要重写View的ondraw方法,同样是电池;

这里要非常注意,你最好吧View 的三个构造函数在你的类中都实现一下,否则会出现在布局的时候,会出现很多奇怪的现象,具体什么现象现在忘了,像这样:

       publicBatteryView(Context context) {
              super(context);
              initView();
       }
 
       publicBatteryView(Context context, AttributeSet attrs) {
              super(context,attrs);
              initView();
       }
 
       publicBatteryView(Context context, AttributeSet attrs, int defStyleAttr) {
              super(context,attrs, defStyleAttr);
              initView();
       }
关键中的关键:onDraw()

	@Override
	protected void onDraw(Canvas canvas) {
		super.onDraw(canvas);
		canvas.save();
		canvas.translate(measureWidth / 2, measureHeigth / 2);
		canvas.drawRoundRect(mBatteryRect, 2f, 2f, mBatteryPaint); // 画电池轮廓需要考虑 画笔的宽度
		canvas.drawRoundRect(mCapRect, 2f, 2f, mBatteryPaint);// 画电池盖
		canvas.drawRect(mPowerRect, mPowerPaint);// 画电量
		canvas.restore();
	}
	
measurewidth,measureHeigth 哪里来的? 

       @Override
       protectedvoid onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
              measureWidth= MeasureSpec.getSize(widthMeasureSpec);
              measureHeigth= MeasureSpec.getSize(heightMeasureSpec);
              setMeasuredDimension(measureWidth,measureHeigth);
       }

当需要改变电池状态的时候,要记得重绘invalidate(); 如果在子线程中,要用postInvalidate(); 这个函数会触发,去执行onDraw()函数再重新画一次。

就是这样,也不难吧? 就是算坐标的时候,仔细一点,没什么的。






  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值