跳至主要內容

10.4G信号控件走一个吧


4G信号控件走一个吧,继续摸鱼

做最左边那个

图片描述
图片描述

上几个图吧

图片描述图片描述图片描述

前面的文章直接绘制图片的了

摸鱼?写个电量显示的玩意?open in new window

也是根据状态绘制图片即可

没有卡的,有卡的,显示信号

但是在绘制文字的时候要注意,baseline是文字的底部。

在构造方法里知道尺寸

    public SignalView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        options = new BitmapFactory.Options();
        options.inScaled = false;
        //获取到图片的长宽
        textPaint = new Paint();
        textPaint.setFlags(Paint.ANTI_ALIAS_FLAG);
        textPaint.setStyle(Paint.Style.STROKE);
        textPaint.setColor(getResources().getColor(R.color.white));
        textPaint.setTextSize(12.0f);
        noSimCarPic = BitmapFactory.decodeResource(getResources(), R.mipmap.top_no_sim_card, options);
        targetHeight = noSimCarPic.getHeight();
        width = noSimCarPic.getWidth();
        retestSize();
        //绘制图片的画笔
        picPaint = new Paint();
        picPaint.setFlags(Paint.ANTI_ALIAS_FLAG);
        initPicRes();
    }

提取一个resize

    private void retestSize() {
        textWidth = textPaint.measureText(showText);
        totalWidth = (int) (textWidth + width);
        ICLogger.d("textWidth == > " + textWidth + " totalWidth == > " + totalWidth);
    }

当信号变化从有信号变成无卡的蚨,要重新测量,否则宽度太大了。

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        setMeasuredDimension(totalWidth, targetHeight);
    }

绘制的话是两部分

  @Override
    protected void onDraw(Canvas canvas) {
        if (!TextUtils.isEmpty(showText)) {
            canvas.drawText(showText, totalWidth - textWidth,
                    targetHeight / 2, textPaint);
        }
        if (bitmap == null) {
            return;
        }
        //判断状态
        canvas.drawBitmap(bitmap, 0, 0, picPaint);
    }

对外暴露的有:

  • void noNetwork() 没有网络,显示noSimCard的图标
  • void updateNetworkType(String text)更新网络文字类型,比如说4G,3G之类的
  • void updateLev(int lev)更新网络信号强度

okay了,以上的知识就可以做出那个图标了。