生活随笔
收集整理的這篇文章主要介紹了
自定义控件之-----progressBar
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
寫(xiě)了那一年多代碼都沒(méi)有認(rèn)認(rèn)真真寫(xiě)過(guò)自定義控件,最近看到網(wǎng)易新聞里面的加載圖標(biāo)如圖
感覺(jué)很有意思,就準(zhǔn)備自己寫(xiě)個(gè)玩玩。在api里面腦補(bǔ)了一些canvas的姿勢(shì),就上了,效果如下。
說(shuō)實(shí)話真心不難,自定義控件比起平時(shí)做的應(yīng)用多了幾分自由和創(chuàng)作的快感,可能我應(yīng)該去做游戲,代碼如下,注釋已經(jīng)寫(xiě)的很白癡了:
?
[java]?view plaincopyprint?
package?com.example.circleprogressbar;????import?android.content.Context;??import?android.graphics.Canvas;??import?android.graphics.Color;??import?android.graphics.Paint;??import?android.graphics.RectF;??import?android.util.AttributeSet;??import?android.view.View;????public?class?CircleProgressBarView?extends?View?{??????private?int?progress;??????private?int?max;??????private?Paint?paint;??????private?RectF?oval;??????public?int?getMax()?{??????????return?max;??????}??????public?void?setMax(int?max)?{??????????this.max?=?max;??????}??????public?int?getProgress()?{??????????return?progress;??????}??????public?void?setProgress(int?progress)?{??????????this.progress?=?progress;??????????invalidate();??????}????????public?CircleProgressBarView(Context?context,?AttributeSet?attrs)?{??????????super(context,?attrs);??????????paint?=?new?Paint();??????????oval?=?new?RectF();??????}????????@Override??????protected?void?onDraw(Canvas?canvas)?{??????????super.onDraw(canvas);??????????paint.setAntiAlias(true);??????????paint.setFlags(Paint.ANTI_ALIAS_FLAG);??????????paint.setColor(Color.GRAY);??????????paint.setStrokeWidth(10);??????????paint.setStyle(Paint.Style.STROKE);??????????canvas.drawCircle(100,?100,?55,?paint);??????????paint.setColor(Color.GREEN);??????????oval.set(45,?45,?155,?155);??????????canvas.drawArc(oval,?-90,?((float)?progress?/?max)?*?360,?false,?paint);????????paint.reset();??????????paint.setStrokeWidth(3);??????????paint.setTextSize(35);??????????paint.setColor(Color.BLACK);??????????if?(progress?==?max)?{??????????????canvas.drawText("完成",?70,?110,?paint);??????????}?else?{??????????????canvas.drawText(progress?+?"%",?70,?110,?paint);??????????}??????}??}?? ?
[html]?view plaincopyprint?
<RelativeLayout?xmlns:android="http://schemas.android.com/apk/res/android"??????xmlns:tools="http://schemas.android.com/tools"??????android:layout_width="match_parent"??????android:layout_height="match_parent"??????android:paddingBottom="@dimen/activity_vertical_margin"??????android:paddingLeft="@dimen/activity_horizontal_margin"??????android:paddingRight="@dimen/activity_horizontal_margin"??????android:paddingTop="@dimen/activity_vertical_margin"??????tools:context=".CirclePbActivity"?>????????<com.example.circleprogressbar.CircleProgressBarView??????????android:id="@+id/circleProgressBar"??????????android:layout_width="wrap_content"??????????android:layout_height="wrap_content"?/>??</RelativeLayout>?? ?
[java]?view plaincopyprint?
package?com.example.circleprogressbar;????import?android.os.Bundle;??import?android.os.Handler;??import?android.app.Activity;??import?android.view.Menu;????public?class?CirclePbActivity?extends?Activity?{??????private?CircleProgressBarView?testConvas;??????private?int?i?=?0;??????Handler?handler?=?new?Handler()?{??????????public?void?handleMessage(android.os.Message?msg)?{??????????????testConvas.setProgress(msg.what);??????????????if?(i?<=?testConvas.getMax())?{??????????????????handler.sendEmptyMessageDelayed(i++,?50);??????????????}??????????};??????};??????@Override??????protected?void?onCreate(Bundle?savedInstanceState)?{??????????super.onCreate(savedInstanceState);??????????setContentView(R.layout.activity_circle_progressbar);??????????testConvas?=?(CircleProgressBarView)?findViewById(R.id.circleProgressBar);??????????testConvas.setMax(100);??????????handler.sendEmptyMessageDelayed(i++,?50);??????}??}??
做了圓形的,一不做二不休,把horizontalProgressBar也做了一遍,加了一點(diǎn)創(chuàng)意要素,立馬多了幾分藝術(shù)氣息(其實(shí)好像更俗氣了),各位可以自己發(fā)揮想象力。
?
?
[java]?view plaincopyprint?
package?com.example.circleprogressbar;????import?android.annotation.SuppressLint;??import?android.content.Context;??import?android.graphics.Bitmap;??import?android.graphics.BitmapFactory;??import?android.graphics.Canvas;??import?android.graphics.Color;??import?android.graphics.Paint;??import?android.util.AttributeSet;??import?android.view.View;????@SuppressLint("DrawAllocation")??public?class?HorizontalProgressBarView?extends?View?{??????private?int?progress?=?50;??????private?int?max?=?100;??????private?int?mwidth?=?450;??????private?int?mhight?=?40;??????private?int?startX;??????private?int?startY;??????private?Paint?paint;????????public?int?getMwidth()?{??????????return?mwidth;??????}????????public?void?setMwidth(int?mwidth)?{??????????this.mwidth?=?mwidth;??????}????????public?int?getMhight()?{??????????return?mhight;??????}????????public?void?setMhight(int?mhight)?{??????????this.mhight?=?mhight;??????}????????public?int?getProgress()?{??????????return?progress;??????}????????public?void?setProgress(int?progress)?{??????????this.progress?=?progress;??????????invalidate();??????}????????public?int?getMax()?{??????????return?max;??????}????????public?void?setMax(int?max)?{??????????this.max?=?max;??????}????????public?HorizontalProgressBarView(Context?context,?AttributeSet?attrs)?{??????????super(context,?attrs);??????????paint?=?new?Paint();??????}????????@Override??????protected?void?onDraw(Canvas?canvas)?{??????????super.onDraw(canvas);??????????paint.setAntiAlias(true);??????????paint.setFlags(Paint.ANTI_ALIAS_FLAG);??????????paint.setColor(Color.parseColor("#EFEFEF"));??????????paint.setStrokeWidth(10);??????????canvas.drawRect(startX,?startY,?mwidth,?mhight,?paint);??????????paint.setColor(Color.parseColor("#76B034"));??????????canvas.drawRect(startX,?startY,?((float)?progress?/?max)?*?mwidth,??????????????????mhight,?paint);????????????????????paint.setStrokeWidth(2);??????????paint.setColor(Color.YELLOW);??????????canvas.drawLine(startX,?startY?+?(mhight?-?startY)?/?4?*?1,??????????????????((float)?progress?/?max)?*?mwidth,?startY?+?(mhight?-?startY)??????????????????????????/?4?*?1,?paint);??????????paint.setColor(Color.RED);??????????canvas.drawLine(startX,?startY?+?(mhight?-?startY)?/?4?*?2,??????????????????((float)?progress?/?max)?*?mwidth,?startY?+?(mhight?-?startY)??????????????????????????/?4?*?2,?paint);??????????paint.setColor(Color.WHITE);??????????canvas.drawLine(startX,?startY?+?(mhight?-?startY)?/?4?*?3,??????????????????((float)?progress?/?max)?*?mwidth,?startY?+?(mhight?-?startY)??????????????????????????/?4?*?3,?paint);????????????????????if(progress<(max/3)){??????????????paint.setColor(Color.BLACK);??????????}else?if(progress<(max/3)*2&&progress>(max/3)){??????????????paint.setColor(Color.YELLOW);??????????}else{??????????????paint.setColor(Color.RED);??????????}??????????paint.setTextSize(30);??????????canvas.drawText(progress?+?"%",?((float)?progress?/?max)?*?mwidth?-?20,??????????????????mhight?+?30,?paint);??????}??}?? 最后談一下感想:
?
總感覺(jué)學(xué)的越多,自己的想象力和創(chuàng)新能力越枯竭,代碼敲多了,腦袋敲不靈活了,以前沒(méi)接觸程序的時(shí)候有很多的想法,現(xiàn)在感覺(jué)自己越來(lái)越平庸,沒(méi)了那份想象力,和搬磚的有什么區(qū)別?天朝的教育讓能很快學(xué)會(huì)人家的技術(shù),但是永遠(yuǎn)跟著別人后面,就看各大布局,各種控件,基本上都是學(xué)國(guó)外的。哎,不吐槽了,已經(jīng)這樣了,我希望能保存自己僅有的那份想象力,在敲代碼的時(shí)候多想想自己能創(chuàng)造什么,一次從無(wú)到有,比重復(fù)千萬(wàn)次人家的都有價(jià)值,我是這么認(rèn)為的。
?
原文:http://blog.csdn.net/mobilexu/article/details/9666461
轉(zhuǎn)載于:https://www.cnblogs.com/veins/p/3719424.html
總結(jié)
以上是生活随笔為你收集整理的自定义控件之-----progressBar的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。