中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

如何在Android中利用View實現一個自動轉圈功能

發布時間:2021-02-22 17:32:17 來源:億速云 閱讀:236 作者:戴恩恩 欄目:移動開發

這篇文章主要為大家詳細介紹了如何在Android中利用View實現一個自動轉圈功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,發現的小伙伴們可以參考一下:

在values文件夾下創建attrs.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
 <declare-styleable name="MyPb">
  <attr name="circle_color" format="color" />
  <attr name="circle_radius" format="dimension" /><!-- 尺寸 -->
  <attr name="circle_x" format="dimension" />
  <attr name="circle_y" format="dimension" />
 </declare-styleable>
</resources>

寫一個類繼承view

package widget;

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.View;

import com.bwie.zdycircle.R;

import java.util.Timer;
import java.util.TimerTask;

/**
 * Created by Administrator on 2017/12/7.
 */

public class MyPb extends View {

 private float radius, cx, cy;
 private Paint paint;
 private float sweepAngle;// 旋轉角度

 public MyPb(Context context) {
  super(context, null);
 }

 public MyPb(Context context, @Nullable AttributeSet attrs) {
  super(context, attrs);
  // 獲取自定義的屬性
  TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.MyPb);

  // 獲取顏色
  int color = a.getColor(R.styleable.MyPb_circle_color, Color.BLACK);// 獲取不到給默認值
  radius = a.getDimension(R.styleable.MyPb_circle_radius, 20);
  cx = a.getDimension(R.styleable.MyPb_circle_x, 100);
  cy = a.getDimension(R.styleable.MyPb_circle_y, 100);

  // 需要回收
  a.recycle();

  paint = new Paint();
  paint.setAntiAlias(true);// 抗鋸齒
  paint.setColor(color);
  paint.setStyle(Paint.Style.STROKE);// 空心

  Timer timer = new Timer();
  timer.schedule(new TimerTask() {
   @Override
   public void run() {
    if (sweepAngle > 360) {
     return;
    }
    sweepAngle += 1;
    postInvalidate();
   }
  }, 1000, 20);// 每隔20毫秒執行一次

 }

 @Override
 protected void onDraw(Canvas canvas) {
  paint.setColor(Color.BLUE);
  paint.setStrokeWidth(10);
  canvas.drawCircle(cx, cy, radius, paint);// 畫圓
  paint.setStrokeWidth(20);// 粗細
  // 畫運動的軌跡
  paint.setColor(Color.RED);
  // 上下左右與圓重合,左邊為圓心的橫坐標減去半徑,上邊為縱坐標減去半徑,以此類推
  RectF rectF = new RectF(cx - radius, cy - radius, cx + radius, cy + radius);
  // 起始角度,旋轉角度,第三個屬性為是否填充,畫筆
  canvas.drawArc(rectF, -90, sweepAngle, false, paint);

  // 繪制文字
  int progress = (int) (sweepAngle / 360f * 100);
  paint.setTextSize(50);
  paint.setStrokeWidth(0);
  paint.setColor(Color.BLACK);
  canvas.drawText(progress + "%", cx - 20, cy, paint);
 }
}

在主頁面布局中引入自定義view類

<?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"
 tools:context="com.bwie.zdycircle.MainActivity">

 <widget.MyPb
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  app:circle_color="#0000ff"
  app:circle_radius="70dp"
  app:circle_x="200dp"
  app:circle_y="200dp" />

</LinearLayout>

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

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

AI

三门县| 曲松县| 桐城市| 昔阳县| 东阳市| 崇义县| 四平市| 东乌珠穆沁旗| 洛浦县| 阳江市| 玉山县| 南通市| 顺平县| 自治县| 通渭县| 鲁山县| 阿克苏市| 丰都县| 囊谦县| 双辽市| 福鼎市| 宜川县| 新巴尔虎右旗| 商洛市| 乌兰县| 伊川县| 裕民县| 榆中县| 临安市| 长子县| 前郭尔| 车致| 萨迦县| 枣阳市| 芦溪县| 屯留县| 江华| 渑池县| 浮山县| 西吉县| 凤庆县|