自定义View 箭头 变色 加速 减速

attrs:

<declare-styleable name="Myview">
         <attr name="yanse" format="color"></attr>
        <attr name="width" format="integer"></attr>
    </declare-styleable>

Main:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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="test.bwie.com.conqiao.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="设置颜色"
        tools:layout_editor_absoluteY="0dp"
        tools:layout_editor_absoluteX="8dp" />

    <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="加速"
        tools:layout_editor_absoluteY="0dp"
        tools:layout_editor_absoluteX="8dp" />

    <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="减速"
        tools:layout_editor_absoluteY="0dp"
        tools:layout_editor_absoluteX="8dp" />

    <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="暂定/开始"
        tools:layout_editor_absoluteY="0dp"
        tools:layout_editor_absoluteX="8dp" />


    <View.Myview
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/my"
        app:width="3"
        android:layout_below="@+id/pause_or_start"
        app:yanse="@color/colorAccent"/>
</RelativeLayout>

View:
package View;

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

import test.bwie.com.conqiao.R;

/**
* Created by 白玉春 on 2017/9/28.
*/

public class Myview extends View {

private Paint paint;
//当前attr的颜色和宽度
private int width;
private int color;

//画笔的颜色:
private int HUABICOLOR;

//圆心
private int curx;
private int cury;
private int redio = 130;
//速度
private  int  send = 0;
public Myview(Context context) {
    super(context);
    init(context);
}

public Myview(Context context, @Nullable AttributeSet attrs) {
    super(context, attrs);
    init(context);
    TypedArray ty = context.obtainStyledAttributes(attrs,R.styleable.Myview);
    for(int i= 0 ; i<ty.getIndexCount(); i++){
      int cont =  ty.getIndex(i);
       switch (cont){
           case R.styleable.Myview_width:
               width = ty.getInteger(cont,3);
               break;
           case R.styleable.Myview_yanse:
               color = ty.getColor(cont, Color.BLACK);
               HUABICOLOR = color;
               break;
       }
    }
}



public Myview(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    init(context);
}

/**
 * 初始化一根笔
 * @param context
 */
private void init(Context context) {
    paint = new Paint();
}

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    //画圈的颜色  等
    paint.setAntiAlias(true);
    paint.setColor(HUABICOLOR);
    paint.setStyle(Paint.Style.STROKE);

    curx = getWidth()/2;
    cury = getHeight()/2;

    canvas.drawCircle(curx,cury,redio,paint);
    canvas.save();

     //rotate 旋转
    canvas.rotate(send,curx,cury);
    //path  用来画图
    Path path = new Path();

    //连线
    path.moveTo(curx+redio,cury);
    path.lineTo(curx+redio-20,cury-20);
    path.lineTo(curx+redio,cury+20);
    path.lineTo(curx+redio+20,cury-20);

    //闭合
    path.close();
    //类型
    paint.setStyle(Paint.Style.FILL);
    paint.setColor(Color.GREEN);//图形颜色
    canvas.drawPath(path,paint);//画出来
    canvas.restore();

// 速度加
send += 1*con;
if(!bu) {
invalidate();
}
}

private int con = 1;
private boolean bu =false;

public void setColor(int colors){
    if(HUABICOLOR != colors){
        HUABICOLOR =colors;
    }else{
        HUABICOLOR = color;
    }
}

public void add(){
    con++;
    if(con>=10){
        con = 10;
        Toast.makeText(getContext(), "好快", Toast.LENGTH_SHORT).show();
    }
}

public void jian(){
    con--;
    if(con<=1){
        con=1;
    }
}

public void Zt(){
    if(bu){
        bu = !bu;
        invalidate();
    }else{
        bu =!bu;
    }
}

}

Main:
package test.bwie.com.conqiao;

import android.graphics.Color;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;

import View.Myview;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

private Myview myview;
/**
 * 设置颜色
 */
private Button mSetColorBtn;
/**
 * 加速
 */
private Button mAdd;
/**
 * 减速
 */
private Button mSlow;
/**
 * 暂定/开始
 */
private Button mPauseOrStart;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    initView();

    myview = (Myview) findViewById(R.id.my);

}

private void initView() {
    mSetColorBtn = (Button) findViewById(R.id.set_color_btn);
    mSetColorBtn.setOnClickListener(this);
    mAdd = (Button) findViewById(R.id.add);
    mAdd.setOnClickListener(this);
    mSlow = (Button) findViewById(R.id.slow);
    mSlow.setOnClickListener(this);
    mPauseOrStart = (Button) findViewById(R.id.pause_or_start);
    mPauseOrStart.setOnClickListener(this);
}

@Override
public void onClick(View v) {
    switch (v.getId()) {
        case R.id.set_color_btn:
            myview.setColor(Color.GREEN);
            break;
        case R.id.add:
            myview.add();
            break;
        case R.id.slow:
            myview.jian();
            break;
        case R.id.pause_or_start:
            myview.Zt();
            break;
    }
}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值