自定义天气View控件

有段时间没有写博客了,由于国庆节和工作的原因,停了一周,继续捡起来。
这段时间学习了很多关于自定义view的知识,大多是学习zhy的教程。上周看到过朋友在朋友圈晒图,晒出一张老家的天气图片。看了一下,就模仿实现了下面的效果。首先上效果图:
这里写图片描述

首先分享一下我自己对自定义view步骤理解
(1)分析需要实现的view有哪些需要自定义的属性
(2)在attr.xml文件中定义需要实现的属性
(3)选择最合适的父类(这里很大可能是View,但是也可以是比较高级的view的子类,比如progressBar,TextView等)
(4)重写onMeasure方法(这里面主要是实现对xml布局文件中wrap_content和match_parent的处理)
(5)重写onDraw()方法,这个函数主要是利用了paint和canvas的一些api,具体可以参考[之前的一篇文章]。(http://blog.csdn.net/huxingnong/article/details/52486519)

下面介绍一些本次需要实现的过程:
本次继承的父类为View

public class WeatherView extends View
{
   

    /**
     * 一些非属性变量
     */
    private final Context mContext;
    private Paint mPaint;
    private Rect mBound;

    /**
     * 自定义的一些属性变量
     */
    private int mNormalColor = 0xaaffffff, mValueColor = Color.RED;
    private int mRadius = dp2Px(100);
    private int mLineWidth = dp2Px(15);
    private String mTemperature = "10°", mTip = "黄色暴风预警";
    private int mTemperatureSize = sp2Px(26), mTemperatureColor = 0xffff0000,
            mTipSize = sp2Px(14), mTipColor = 0x99ffffff;

    /**
     * 可以暴露给用户设置的接口,实现温度的变化
     */
    private final int mMaxValue = 30, mMinValue = 9;

    private Bitmap mBitmap;

    public WeatherView(Context context)
    {
        this(context, null);
    }

    public WeatherView(Context context, AttributeSet attrs)
    {
        this(context, attrs, 0);
    }

    public WeatherView(Context context, AttributeSet attrs, int defStyleAttr)
    {
        super(context, attrs, defStyleAttr);
        mContext = context;
        init(context, attrs);
    }

    /**
     * 初始化操作 包含画笔等的初始化 获得自定义的属性值
     * 
     * @param context
     * @param attrs
     */
    private void init(Context context, AttributeSet attrs)
    {
        mPaint = new Paint();
        mBound = new Rect();

        TypedArray taArray = context.ob
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值