自定義View之審核進(jìn)度展示

失蹤人口回歸,好好整理一下簡(jiǎn)書,寫幾篇文章,效果圖如下:

image

思路

這個(gè)自定義view實(shí)現(xiàn)和我以前一篇文章大同小異,只不過這里的圓形背景用圖片畫出來了,這里的重點(diǎn)還是確定起始的坐標(biāo)點(diǎn),這里我是以 圖片的寬高為核心,確立坐標(biāo)的。 startX =av_imageWidth+av_imageWidth/2;這里我讓x起點(diǎn)離左邊界 一個(gè)半左右的圖片寬度的距離 。

代碼

public class AuditprogressView extends View {
    private Context mcontext;
    private float av_imageWidth; // 圖片寬高
    private float av_linehight; // 線的高度
    private int av_lineColor; // 線的顏色
    private float av_Textsize; // 進(jìn)度文字展示
    private float av_timeTextsize; //時(shí)間 文字
    private  int av_Textcolor; // 進(jìn)度文字的顏色
    private  int av_timeTextcolor; // 時(shí)間文字的顏色
    private  int progressCount = 4; // 進(jìn)度個(gè)數(shù)
    private Paint paint ; // 畫筆
    //  確定繪制的圖片
    private Bitmap audit_drawBitmap;
    /*
       * view的高度
       */
    private int height;
    private int width;

    /**
     * 第一個(gè)圖的坐標(biāo)
     */
    private float startX;
    private float startY;

    private RectF imageRectF; // 圖片繪制的區(qū)域


    private ArrayList<String>  textlist ; // 進(jìn)度文字list

    private ArrayList<String>  ttextlist  ; // 時(shí)間文字list

    private int progress = 2; //  當(dāng)前進(jìn)度

    private  boolean isProgress;// 當(dāng)前進(jìn)度是成功還是失敗

    public AuditprogressView(Context context) {
        super(context);
    }

    public AuditprogressView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        mcontext =context;
        getAtt(attrs);
        initPaint();
    }

    public AuditprogressView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    private void getAtt(AttributeSet attrs) {
        TypedArray typedArray = mcontext.obtainStyledAttributes(attrs, R.styleable.AuditprogressView);
        progressCount = typedArray.getInt(R.styleable.AuditprogressView_av_progressCount, progressCount);
        av_Textcolor = typedArray.getColor(R.styleable.AuditprogressView_av_Textcolor,  Color.parseColor("#df0781"));
        av_lineColor = typedArray.getColor(R.styleable.AuditprogressView_av_lineColor,  Color.parseColor("#df0781"));
        av_timeTextcolor =typedArray.getColor(R.styleable.AuditprogressView_av_timeTextcolor,  Color.parseColor("#df0781"));
        av_imageWidth = typedArray.getDimension(R.styleable.AuditprogressView_av_imageWidth,100);
        av_linehight = typedArray.getDimension(R.styleable.AuditprogressView_av_linehight,10);
        av_Textsize = typedArray.getDimension(R.styleable.AuditprogressView_av_Textsize,10);
        av_timeTextsize = typedArray.getDimension(R.styleable.AuditprogressView_av_timeTextsize,10);
        typedArray.recycle();
    }
    /**
     * 初始化畫筆
     */
    private void initPaint() {
        imageRectF = new RectF();
        paint = new Paint();
        // 抗鋸齒
        paint.setAntiAlias(true);
//        // 設(shè)定是否使用圖像抖動(dòng)處理,會(huì)使繪制出來的圖片顏色更加平滑和飽滿,圖像更加清晰
        paint.setDither(true);
//        // 空心
//        paint.setStyle(Paint.Style.STROKE);
        // 文字居中
        paint.setTextAlign(Paint.Align.CENTER);
    }
    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);
        width = w;
        height = h;
    }




    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        startX =av_imageWidth+av_imageWidth/2;
        startY = av_imageWidth+av_imageWidth/2;
        paint.setTextSize(av_Textsize);
        if (ttextlist.size()>0&&textlist.size()>0){
            drawLine(canvas);
            drawImage(canvas);
            drawText(canvas);
            drawTimeText(canvas);
        }


    }
    // 畫文本
    private void drawTimeText(Canvas canvas) {
        paint.setColor(av_Textcolor);
        for (int i = 0; i < progressCount; i++) {
            canvas.drawText(ttextlist.get(i),startX + i * (width- 2*(av_imageWidth+av_imageWidth/2))/(progressCount-1),3*startY, paint);
        }
    }

    // 畫時(shí)間文本
    private void drawText(Canvas canvas) {
        paint.setColor(av_timeTextcolor);
        for (int i = 0; i < progressCount; i++) {
            canvas.drawText(textlist.get(i),startX + i * (width- 2*(av_imageWidth+av_imageWidth/2))/(progressCount-1),2*startY, paint);
        }
    }



    // 畫圖片
    private void drawImage(Canvas canvas) {
        for (int i = 0; i < progressCount; i++) {
            if (i<=progress-1){
                audit_drawBitmap =  BitmapFactory.decodeResource(getResources(), R.drawable.finsh);
                if (i ==progress-1&& !isProgress){
                    audit_drawBitmap =BitmapFactory.decodeResource(getResources(), R.drawable.defeated);
                }
//
            }else {
                audit_drawBitmap =BitmapFactory.decodeResource(getResources(), R.drawable.no_finsh);
//
            }
            // 繪制圖片
//            canvas.drawBitmap(audit_drawBitmap,startX -av_imageWidth/2+i * (width- 2*(av_imageWidth+av_imageWidth/2))/(progressCount-1), startY-av_imageWidth/2, paint);

            imageRectF.set((float)(startX -av_imageWidth/2+i * (width- 2*(av_imageWidth+av_imageWidth/2))/(progressCount-1)),(float)(startY-av_imageWidth/2),(float)(startX +av_imageWidth/2+i * (width- 2*(av_imageWidth+av_imageWidth/2))/(progressCount-1)),(float)(startY+av_imageWidth/2));
            canvas.drawBitmap(audit_drawBitmap, null, imageRectF, null);
        }
    }

    // 畫線
    private void drawLine(Canvas canvas) {
        for (int i = 0; i < progressCount-1; i++) {
            if (i<=progress-2){
                paint.setColor(av_lineColor);
            }else {
                paint.setColor(Color.BLACK);;
            }
            canvas.drawLine(2*av_imageWidth/3+startX + i * (width- 2*(av_imageWidth+av_imageWidth/2))/(progressCount-1),startY,startX-2*av_imageWidth/3 + (i+1) * (width- 2*(av_imageWidth+av_imageWidth/2))/(progressCount-1),startY,paint);

        }
    }

    public  void  setDate(ArrayList<String> mtextlist,ArrayList<String> mttextlist ,int mProgress,boolean isprogress){
        textlist = mtextlist;
        ttextlist = mttextlist;
        progress = mProgress;
        isProgress = isprogress;
        invalidate();
    }

}

attrs文件

 <declare-styleable name="AuditprogressView">
        <attr name="av_imageWidth" format="dimension" />
        <attr name="av_progressCount" format="integer" />
        <attr name="av_lineWidth" format="dimension" />
        <attr name="av_linehight" format="dimension" />
        <attr name="av_lineColor" format="color" />
        <attr name="av_Textsize" format="dimension"></attr>
        <attr name="av_timeTextsize" format="dimension"></attr>
        <attr name="av_Textcolor" format="color"></attr>
        <attr name="av_timeTextcolor" format="color"></attr>
    </declare-styleable>

Activity運(yùn)用

final ArrayList<String > textlist = new ArrayList<>();
        textlist.add("提交成功");
        textlist.add("提交成功");
        textlist.add("提交成功");
        textlist.add("提交成功");
        textlist.add("提交成功");
        final ArrayList<String> timelist = new ArrayList<>();
        timelist.add("12-18 11:20");
        timelist.add("12-19 11:20");
        timelist.add("12-20 11:20");
        timelist.add("12-21 11:20");
        timelist.add("12-21 11:20");
        av.setDate(textlist,timelist,3,true);
        bt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                av.setDate(textlist,timelist, (int) (Math.random() * 6),true);
            }
        });

項(xiàng)目地址:
csdn:http://download.csdn.net/download/qq_38367802/10172775
github:https://github.com/liuzhenhang/myview

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容