成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

Android中怎么通過(guò)自定義Canvas實(shí)現(xiàn)時(shí)鐘效果

Android中怎么通過(guò)自定義Canvas實(shí)現(xiàn)時(shí)鐘效果,相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問題。

創(chuàng)新互聯(lián)建站成立于2013年,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元洱源做網(wǎng)站,已為上家服務(wù),為洱源各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:13518219792

具體內(nèi)容如下

自定義控件,在安卓是也是一種無(wú)所不能的技術(shù)了,所有自帶控件,以及組合自帶控件不能實(shí)現(xiàn)的一些效果,我們都可以通過(guò)自定義控件來(lái)實(shí)現(xiàn),不過(guò),如果能有系統(tǒng)控件使用的就用系統(tǒng)自帶的控件去實(shí)現(xiàn),而不必要用自定義去實(shí)現(xiàn),我們都知道,自定義控件在一定的程度上,效率往往會(huì)比系統(tǒng)自帶的控件效率低,所以我不到萬(wàn)不得已,不要使用自定義控件,今天用自定一控件,實(shí)現(xiàn)一個(gè)小小的時(shí)鐘,具體的實(shí)現(xiàn)在代碼中注釋功能。

ClockView.java

public class ClockView extends View implements Handler.Callback { //定義一個(gè)畫筆 private Paint paint; //定義個(gè)畫小時(shí)指針的路徑 private Path hour; //定義一個(gè)畫分針的路徑 private Path minute; //定義一個(gè)Handler來(lái)實(shí)現(xiàn)時(shí)鐘跑動(dòng)效果 private Handler handler = new Handler(this); public ClockView(Context context) {  this(context, null); } public ClockView(Context context, AttributeSet attrs) {  this(context, attrs, 0); } public ClockView(Context context, AttributeSet attrs, int defStyleAttr) {  super(context, attrs, defStyleAttr);  //創(chuàng)建一個(gè)畫筆  this.paint = new Paint();  //創(chuàng)建一個(gè)時(shí)針路徑,用于繪制時(shí)針  hour = new Path();  //首先將點(diǎn)定位到時(shí)針尾部,所有的坐標(biāo),大家可以根據(jù)圓心點(diǎn)去尋找對(duì)應(yīng)的點(diǎn)  hour.moveTo(500, 380);  //然后與(185,500)連接一條線  hour.lineTo(485, 500);  //然后與(500,515)連接一條線  hour.lineTo(500, 515);  //最后繪制成一個(gè)完整的時(shí)針線條了,效果為圖中的綠色線條  hour.lineTo(515, 500);  //創(chuàng)建一個(gè)分針路徑  minute = new Path();  minute.moveTo(500, 350);  minute.lineTo(490, 500);  minute.lineTo(500, 510);  //最后連接成一條分針線條  minute.lineTo(510, 500);  //一開始就發(fā)送消息,讓時(shí)鐘開始運(yùn)行  handler.sendEmptyMessage(0); } @TargetApi(Build.VERSION_CODES.N) @Override protected void onDraw(Canvas canvas) {  super.onDraw(canvas);  //首先設(shè)置畫布為黑色  canvas.drawColor(0xff000000);  //獲取屏幕的寬,和高的比例,選取最小的比例,這樣就能讓圖片位于中間了。  float scale = Math.min(getWidth() / 1000.0f, getHeight() / 1000.0f);  //設(shè)置畫布的比例  canvas.scale(scale, scale);  //將圖片繪制在屏幕的中間  canvas.translate((getWidth() / scale - 1000) / 2, (getHeight() / scale - 1000) / 2);  //設(shè)置畫筆類型為空心的  paint.setStyle(Paint.Style.STROKE);  //顏色為白色  paint.setColor(0xffffffff);  //畫筆的粗細(xì)  paint.setStrokeWidth(5);  //將上面所有繪制的內(nèi)容進(jìn)行保存一下  canvas.save();  //開始繪制一個(gè)時(shí)鐘外圓  canvas.drawCircle(500, 500, 200, paint);  //通過(guò)for循環(huán)繪制12個(gè)小時(shí)的時(shí)鐘刻度  for (int i = 0; i < 12; i++) {   if (i % 3 == 0) {//繪制12 3 6 9點(diǎn)時(shí)刻    paint.setStrokeWidth(5);//設(shè)置粗度為5    canvas.drawLine(500, 300, 500, 320, paint);   } else {    paint.setStrokeWidth(2);    canvas.drawLine(500, 300, 500, 315, paint);   }   canvas.rotate(30, 500, 500);//將圓圍繞圓點(diǎn)旋轉(zhuǎn)30度,每30度繪制一個(gè)刻度  }  paint.setStrokeWidth(3);  paint.setColor(0xff00ff00);  paint.setStyle(Paint.Style.FILL);  //定義一個(gè)Calendar時(shí)鐘類  Calendar calendar = Calendar.getInstance();  //將上面所有繪制的東西保存下來(lái)  canvas.save();  //通過(guò)獲取系統(tǒng)的時(shí)鐘,然后繪制到對(duì)應(yīng)的時(shí)針  canvas.rotate(calendar.get(Calendar.HOUR) * 30 + calendar.get(Calendar.MINUTE), 500, 500);  //繪制時(shí)針  canvas.drawPath(hour, paint);  //重繪上一次的時(shí)鐘  canvas.restore();  //設(shè)置分針的顏色為紅色  paint.setColor(0xffff0000);  //根據(jù)系統(tǒng)獲取的時(shí)間旋轉(zhuǎn)到對(duì)應(yīng)的角度  canvas.rotate(calendar.get(Calendar.MINUTE) * 6 + calendar.get(Calendar.SECOND) * 0.1f, 500, 500);  //繪制分針  canvas.drawPath(minute, paint);  paint.setColor(Color.WHITE);  paint.setStrokeWidth(2);  canvas.save();  canvas.rotate(calendar.get(Calendar.SECOND) * 6, 500, 500);  //繪制秒針  canvas.drawLine(500, 330, 500, 510, paint);  canvas.restore();  canvas.save(); } /**  * 通過(guò)Handler更新時(shí)鐘走向  * @param message  * @return  */ @Override public boolean handleMessage(Message message) {  switch (message.what) {   case 0:    //重新掉用onDraw方法    invalidate();    //每隔一秒繪制一次    handler.sendEmptyMessageDelayed(0, 1000);    break;  }  return true; }}

看完上述內(nèi)容,你們掌握Android中怎么通過(guò)自定義Canvas實(shí)現(xiàn)時(shí)鐘效果的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!

當(dāng)前名稱:Android中怎么通過(guò)自定義Canvas實(shí)現(xiàn)時(shí)鐘效果
新聞來(lái)源:http://jinyejixie.com/article46/pppjhg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、網(wǎng)站制作網(wǎng)站導(dǎo)航、靜態(tài)網(wǎng)站、虛擬主機(jī)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)
大兴区| 育儿| 鹤峰县| 当阳市| 赤峰市| 咸丰县| 仁布县| 南汇区| 株洲市| 抚州市| 临桂县| 湖北省| 宣城市| 龙海市| 怀宁县| 绍兴市| 南汇区| 深泽县| 奉节县| 马尔康县| 昌平区| 兴仁县| 仁布县| 色达县| 象州县| 社旗县| 三台县| 台南市| 溆浦县| 潞城市| 莆田市| 湛江市| 南皮县| 江陵县| 理塘县| 莫力| 栖霞市| 吉安县| 柘荣县| 天等县| 烟台市|