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;
}
}
}