您好,登錄后才能下訂單哦!
android中怎么自定義手表效果,相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。
<?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)容,你們掌握android中怎么自定義手表效果的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。