91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android中怎么通過自定義Canvas實現時鐘效果

發布時間:2021-06-26 16:42:51 來源:億速云 閱讀:135 作者:Leah 欄目:編程語言

Android中怎么通過自定義Canvas實現時鐘效果,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

具體內容如下

自定義控件,在安卓是也是一種無所不能的技術了,所有自帶控件,以及組合自帶控件不能實現的一些效果,我們都可以通過自定義控件來實現,不過,如果能有系統控件使用的就用系統自帶的控件去實現,而不必要用自定義去實現,我們都知道,自定義控件在一定的程度上,效率往往會比系統自帶的控件效率低,所以我不到萬不得已,不要使用自定義控件,今天用自定一控件,實現一個小小的時鐘,具體的實現在代碼中注釋功能。

ClockView.java

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

看完上述內容,你們掌握Android中怎么通過自定義Canvas實現時鐘效果的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

辉南县| 凤冈县| 芜湖市| 常山县| 宜兴市| 海伦市| 富平县| 都安| 高州市| 崇仁县| 宁武县| 开平市| 忻州市| 桂平市| 察隅县| 姜堰市| 枝江市| 绵竹市| 奎屯市| 庄河市| 寿光市| 塘沽区| 大同市| 承德市| 山西省| 页游| 佛坪县| 曲靖市| 防城港市| 茶陵县| 静乐县| 民勤县| 信阳市| 大余县| 康保县| 宾阳县| 鄂托克旗| 黄平县| 长汀县| 雅安市| 拜泉县|