自定义一个带箭头旋转的圆圈 , 配置服务器后台

public class MainActivity extends AppCompatActivity {
    private MyCustom mycustom;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mycustom = (MyCustom) findViewById(R.id.mycustom);
    }
    public void onClick(View view) {
        mycustom.seColor(Color.BLUE);
    }
    public void add(View view) {
        mycustom.speed();
    }
    public void slow(View view) {
        mycustom.slowDown();
    }
    public void pauseOrStart(View view) {
        mycustom.pauseOrStart();
    }
}

public class MyCustom extends View { //xml中获取的颜色 private int circleBoundColor; private float circleBoundWidth; //当前画笔画圆的颜色 private int CurrenCircleBoundColor; private Paint paint; public MyCustom(Context context) { super(context); initView(context); } public MyCustom(Context context, @Nullable AttributeSet attrs) { super(context, attrs); initView(context); TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.MyCustom); for (int i=0;i<typedArray.getIndexCount();i++){ int index = typedArray.getIndex(i); switch (index){ case R.styleable.MyCustom_custom_color: circleBoundColor= typedArray.getColor(index, Color.RED); CurrenCircleBoundColor=circleBoundColor; break; case R.styleable.MyCustom_custom_width: circleBoundWidth=typedArray.getDimension(index,3); break; } } } private void initView(Context context) { paint = new Paint(); } public void seColor(int color){ if (CurrenCircleBoundColor!=color) { CurrenCircleBoundColor=color; }else { CurrenCircleBoundColor=circleBoundColor; } } //圆心 private float pionX; private float pionY; //圆点 private float yuanxin=130; //圆框迅速转 private float currentDegree = 0; @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); paint.setAntiAlias(true); paint.setColor(CurrenCircleBoundColor); paint.setStrokeWidth(circleBoundWidth); paint.setStyle(Paint.Style.STROKE); pionX=getWidth()/2; pionY=getHeight()/2; canvas.drawCircle(pionX,pionY,yuanxin,paint); canvas.save(); //旋转画布 , 如果旋转的的度数大的话,视觉上看着是旋转快的 canvas.rotate(currentDegree,pionX,pionY); //提供了一些api可以用来画线(画路径) Path path=new Path(); //从哪开始画 从A开始画 path.moveTo(pionX+yuanxin,pionY); //A点画一个直线到D path.lineTo(pionX + yuanxin - 20, pionY - 20); //D点画一个直线到B path.lineTo(pionX + yuanxin, pionY + 20); //B点画一个直线到C path.lineTo(pionX + yuanxin + 20, pionY - 20); //闭合 -- C点画一个直线到A path.close(); paint.setStyle(Paint.Style.FILL); paint.setColor(Color.BLACK); canvas.drawPath(path, paint); canvas.restore(); //旋转的度数一个一个度数增加, 如果乘以一个速度的话,按一个速度速度增加 currentDegree += 1 * currentSpeed; if (!isPause) { invalidate(); } } private int currentSpeed = 1; private boolean isPause = false; public void speed() { ++currentSpeed; if (currentSpeed >= 10) { currentSpeed = 10; Toast.makeText(getContext(), "我比闪电还快", Toast.LENGTH_SHORT).show(); } } public void slowDown() { --currentSpeed; if (currentSpeed <=1) { currentSpeed = 1; } } public void pauseOrStart() { //如果是开始状态的话去重新绘制 if (isPause) { isPause = !isPause; invalidate(); } else { isPause = !isPause; } }}
XML:
<?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"
    tools:context="com.example.fanyishuo.daijiantou_view.MainActivity">
    <Button
        android:id="@+id/set_color_btn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:onClick="onClick"
        android:text="设置颜色" />
    <Button
        android:id="@+id/add"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/set_color_btn"
        android:layout_centerHorizontal="true"
        android:onClick="add"
        android:text="加速" />
    <Button
        android:id="@+id/slow"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/add"
        android:layout_centerHorizontal="true"
        android:onClick="slow"
        android:text="减速" />
    <Button
        android:id="@+id/pause_or_start"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/slow"
        android:layout_centerHorizontal="true"
        android:onClick="pauseOrStart"
        android:text="暂定/开始" />
<com.example.fanyishuo.daijiantou_view.MyCustom
    android:id="@+id/mycustom"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:custom_color="@color/colorAccent"
    app:custom_width="3dp"
    android:layout_gravity="center"
    />
</LinearLayout>
values下attrs:
<resources>
    <declare-styleable name="MyCustom">
        <attr name="custom_color" format="color"></attr>
        <attr name="custom_width" format="dimension"></attr>
    </declare-styleable>

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值