如何在android中自定義一個(gè)手表效果

如何在android中自定義一個(gè)手表效果?很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。

10年積累的成都網(wǎng)站建設(shè)、成都網(wǎng)站制作經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站制作后付款的網(wǎng)站建設(shè)流程,更有北流免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

.布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:app="http://schemas.android.com/apk/res-auto"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:orientation="vertical"
 >
 
 <Button
  android:id="@+id/btn_start"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="start" />
 .
 
 <Button
  android:id="@+id/btn_stop"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="stop" />
 
 <ImageView
  android:id="@+id/iv_clock"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_gravity="center"
  android:src="@mipmap/ic_launcher" />
</LinearLayout>

3.自定義view,顯示

package com.example.administrator.testz;
 
 
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
 
import java.util.Calendar;
 
/**
 * 優(yōu)化方案:
 * 表盤(pán)課繪制一次
 * 在分線程中進(jìn)行加載
 */
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
 private Button btnStart, btnStop;
 private ImageView mClockImageView;
 Bitmap.Config config = Bitmap.Config.ARGB_8888;
 int width = 500;
 int height = 500;
 
 private Calendar mCalendar;
 private int mHour, mMinute, mSecond;
 private float mDegrees;
 private float length;
 
 private boolean mIsRunning;
 
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
 
  btnStart = (Button) findViewById(R.id.btn_start);
  btnStop = (Button) findViewById(R.id.btn_stop);
  btnStop.setOnClickListener(this);
  btnStart.setOnClickListener(this);
 
  mClockImageView = (ImageView) findViewById(R.id.iv_clock);
  mClockImageView.setImageBitmap(drawClock());
 
 }
 
 /**
  * 畫(huà)表盤(pán)
  */
 private Bitmap drawClockFace() {
  Bitmap bm = Bitmap.createBitmap(width, height, config);
 
  Canvas canvas = new Canvas(bm);
  Paint paint = new Paint();
  paint.setAntiAlias(true); //鋸齒
  paint.setStyle(Paint.Style.STROKE); // 空心
  paint.setStrokeWidth(5);
  paint.setColor(Color.parseColor("#333333"));
 
  // 外層圓
  canvas.drawCircle(width / 2, height / 2, width / 2, paint);
 
  // 內(nèi)層圓 --》圓心
  paint.setStyle(Paint.Style.FILL);
  canvas.drawCircle(width / 2, height / 2, 10, paint);
 
  // 循環(huán)畫(huà)刻度(旋轉(zhuǎn)畫(huà)刻度)
  for (int i = 0; i < 12; i++) {
   if (i % 3 == 0) {
    paint.setStrokeWidth(10);
    canvas.drawLine(width / 2, 0, width / 2, 24, paint);
    canvas.rotate(30, width / 2, height / 2);
   } else {
    canvas.drawLine(width / 2, 0, width / 2, 10, paint);
    canvas.rotate(30, width / 2, height / 2);
   }
  }
 
 
  return bm;
 }
 
 private Bitmap drawClock() {
  Bitmap bm = drawClockFace();
 
  Canvas canvas = new Canvas(bm);
 
  Paint paint = new Paint();
  paint.setAntiAlias(true);
  paint.setColor(Color.parseColor("#333333"));
 
  mCalendar = Calendar.getInstance();
  mHour = mCalendar.get(Calendar.HOUR);
  mMinute = mCalendar.get(Calendar.MINUTE);
  mSecond = mCalendar.get(Calendar.SECOND);
 
  //畫(huà)小時(shí)指針
  paint.setStrokeWidth(10);
  mDegrees = mHour * 30 + mMinute / 2;
  length = (width / 2) * 0.7f;
  canvas.save();
  canvas.rotate(mDegrees, width / 2, height / 2);
  canvas.drawLine(width / 2, height / 2, width / 2, height - (height / 2) - length, paint);
  canvas.restore();
//  canvas.rotate(360 - mDegrees, width / 2, height / 2);
 
  //畫(huà)分鐘指針
  paint.setStrokeWidth(4);
  mDegrees = mMinute * 6 + mSecond / 10;
  length = (width / 2) * 0.78f;
  canvas.save();
  canvas.rotate(mDegrees, width / 2, height / 2);
  canvas.drawLine(width / 2, height / 2, width / 2, height - (height / 2) - length, paint);
  canvas.restore();
//  canvas.rotate(360 - mDegrees, width / 2, height / 2);
 
  //畫(huà)分鐘指針
  paint.setStrokeWidth(2);
  mDegrees = mSecond * 6;
  length = (width / 2) * 0.92f;
  canvas.save();
  canvas.rotate(mDegrees, width / 2, height / 2);
  canvas.drawLine(width / 2, height / 2, width / 2, height - (height / 2) - length, paint);
  canvas.restore();
 
  return bm;
 }
 
 @Override
 public void onClick(View v) {
  switch (v.getId()) {
   case R.id.btn_start:
    mIsRunning = true;
    new ClockTask().execute("");
    break;
   case R.id.btn_stop:
    mIsRunning = false;
    break;
  }
 }
 
 @Override
 protected void onDestroy() {
  super.onDestroy();
  mIsRunning = false;
 }
 
 private class ClockTask extends AsyncTask<Object, Object, Object> {
 
  @Override
  protected Object doInBackground(Object... objects) {
   while (mIsRunning) {
    publishProgress("");
    try {
     Thread.sleep(1000);
    } catch (InterruptedException e) {
     e.printStackTrace();
    }
   }
   return null;
  }
 
  @Override
  protected void onProgressUpdate(Object... values) {
   super.onProgressUpdate(values);
   mClockImageView.setImageBitmap(drawClock());
  }
 }
 
 
}

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。

網(wǎng)站名稱(chēng):如何在android中自定義一個(gè)手表效果
網(wǎng)頁(yè)地址:http://bm7419.com/article18/gejddp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁(yè)設(shè)計(jì)公司、商城網(wǎng)站、品牌網(wǎng)站設(shè)計(jì)、企業(yè)建站服務(wù)器托管、標(biāo)簽優(yōu)化

廣告

聲明:本網(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)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司