Android自定義View實(shí)現(xiàn)自動(dòng)轉(zhuǎn)圈效果
本文實(shí)例為大家分享了Android實(shí)現(xiàn)自動(dòng)轉(zhuǎn)圈效果展示的具體代碼,供大家參考,具體內(nèi)容如下
在values文件夾下創(chuàng)建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>
寫一個(gè)類繼承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;// 旋轉(zhuǎn)角度
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);// 獲取不到給默認(rèn)值
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毫秒執(zhí)行一次
}
@Override
protected void onDraw(Canvas canvas) {
paint.setColor(Color.BLUE);
paint.setStrokeWidth(10);
canvas.drawCircle(cx, cy, radius, paint);// 畫圓
paint.setStrokeWidth(20);// 粗細(xì)
// 畫運(yùn)動(dòng)的軌跡
paint.setColor(Color.RED);
// 上下左右與圓重合,左邊為圓心的橫坐標(biāo)減去半徑,上邊為縱坐標(biāo)減去半徑,以此類推
RectF rectF = new RectF(cx - radius, cy - radius, cx + radius, cy + radius);
// 起始角度,旋轉(zhuǎn)角度,第三個(gè)屬性為是否填充,畫筆
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);
}
}
在主頁(yè)面布局中引入自定義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>
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
【Android 基礎(chǔ)】詳解Animation 動(dòng)畫介紹和實(shí)現(xiàn)
這篇文章主要介紹了【Android 基礎(chǔ)】詳解Animation 動(dòng)畫介紹和實(shí)現(xiàn) ,對(duì)于想要學(xué)習(xí)android開發(fā)的同學(xué)具有一定的參考價(jià)值,有需要的可以了解一下。2016-12-12
Android自定義view實(shí)現(xiàn)水波紋進(jìn)度球效果
在我們的日常開發(fā)中自定義控件還是用的挺多的,設(shè)計(jì)師或者產(chǎn)品為了更好的漂亮,美觀,交互都會(huì)做一些牛逼的ui效果圖,但是最后實(shí)現(xiàn)的還是我們程序員啊。所以說 自定義view你還是得會(huì)的。2016-08-08
Android實(shí)現(xiàn)朋友圈評(píng)論回復(fù)列表
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)朋友圈評(píng)論回復(fù)列表,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11
Android使用Spinner實(shí)現(xiàn)城市級(jí)聯(lián)下拉框
這篇文章主要為大家詳細(xì)介紹了Android使用Spinner實(shí)現(xiàn)城市級(jí)聯(lián)下拉框,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12
發(fā)布?Android?library?到?Maven?解析
這篇文章主要介紹了發(fā)布?Android?library到Maven解析,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-09-09
android Textview文字監(jiān)控(Textview使用方法)
以手機(jī)號(hào)充值為例,當(dāng)用戶輸入最后一位數(shù)時(shí)候,進(jìn)行匯率的變換,本文就實(shí)現(xiàn)類似這樣的功能2013-11-11
Android SurfaceView運(yùn)行機(jī)制剖析--處理切換到后臺(tái)再重新進(jìn)入程序時(shí)的異常
本文主要介紹Android SurfaceView運(yùn)行機(jī)制,這里整理了詳細(xì)的資料來講解SurfaceView的運(yùn)行原理,并附示例代碼參考,有需要的小伙伴可以參考下2016-08-08

