亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

如何在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

崇明县| 莒南县| 恩施市| 宝丰县| 乐东| 房山区| 福州市| 抚远县| 灵璧县| 沂水县| 杭州市| 大名县| 衡阳县| 嵊州市| 乌苏市| 长武县| 余江县| 元氏县| 荆门市| 平乡县| 无棣县| 漳浦县| 修文县| 扎赉特旗| 桃源县| 都安| 获嘉县| 同心县| 黑龙江省| 郯城县| 临朐县| 京山县| 贵港市| 汉中市| 同江市| 永清县| 育儿| 普宁市| 威海市| 祁门县| 南陵县|