泡泡背景

来源:互联网 发布:日语发音软件免费 编辑:程序博客网 时间:2024/04/27 02:43
public class paopao extends View {
private int paopao_sum;
private float paopao_radius;
private int paopao_color;
private int banck_color;
private Paint banck_paint;
private Paint circle_paint;
private circle[] circles;
private int[] direction = { 1, 2, 3, 4, 5, 6, 7, 8 };
private Mythread myThread = null;
private Random random;
private boolean isRuning = true;


public paopao(Context c, AttributeSet attrs) {
super(c, attrs);
// TODO Auto-generated constructor stub
TypedArray a = c.obtainStyledAttributes(attrs, R.styleable.CircleView);
paopao_sum = a.getInteger(R.styleable.CircleView_circleSum, 10);
paopao_radius = a.getDimension(R.styleable.CircleView_circleRadio, 10);
paopao_color = a.getInteger(R.styleable.CircleView_circleColor,
Color.BLACK);
banck_color = a.getInteger(R.styleable.CircleView_backColor,
Color.WHITE);
a.recycle();
// init();
}


@Override
protected void onDetachedFromWindow() {
isRuning = false;
super.onDetachedFromWindow();
}


class Mythread extends Thread {


@Override
public void run() {// 一直运行的方法
while (isRuning) {
for (int i = 0; i < circles.length; i++) {
circle c = circles[i];
changeForDirection(c);
// ******************************
// 边界超出判断
int d;
if (c.getX() > getWidth() || c.getX() < 0
|| c.getY() > getHeight() || c.getY() < 0) {
if (c.getX() > getWidth())
c.setX(getWidth());
if (c.getX() < 0)
c.setX(0);
if (c.getY() > getHeight())
c.setY(getHeight());
if (c.getY() < 0)
c.setY(0);
d = random.nextInt(direction.length) + 1;
circles[i].setDerection(d);
}


postInvalidate();
}// end if()
// **********************************
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}// end while()
}// end for


}// end run()
// }


private void changeForDirection(circle c) {
int dx = 5;
switch (c.getDerection()) {
case 1:// 向上
c.setY(c.getY() - dx);
break;
case 2:// 右上
c.setX(c.getX() + dx);
c.setY(c.getY() - dx);
break;
case 3:// 右
c.setX(c.getX() + dx);


break;
case 4:// 右下
c.setX(c.getX() + dx);
c.setY(c.getY() + dx);
break;
case 5:// 下
c.setY(c.getY() + dx);


break;
case 6:// 左下
c.setX(c.getX() - dx);
c.setY(c.getY() + dx);
break;
case 7:// 左
c.setX(c.getX() - dx);


break;
case 8:// 左上
c.setX(c.getX() - dx);
c.setY(c.getY() - dx);
break;


default:
break;
}
}


@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
init();
}


// 初始化画笔
private void init() {
int d;
int x;
int y;
circle_paint = new Paint();
circle_paint.setStyle(Style.STROKE);
circle_paint.setAntiAlias(true);
banck_paint = new Paint();
banck_paint.setColor(banck_color);
circle_paint.setColor(paopao_color);
circles = new circle[paopao_sum];


random = new Random();
for (int i = 0; i < circles.length; i++) {
d = random.nextInt(8) + 1;
System.out.println(getMeasuredWidth() + "");
x = random.nextInt((int) getMeasuredWidth());


y = random.nextInt((int) getMeasuredHeight());


circles[i] = new circle(x, y, d);


}


}


// yuan
class circle {
private float x;
private float y;
private int derection;


public circle(int x, int y, int d) {
// TODO Auto-generated constructor stub
this.x = x;
this.y = y;
this.derection = d;
}


public float getX() {
return x;
}


public void setX(float x) {
this.x = x;
}


public float getY() {
return y;
}


public void setY(float y) {
this.y = y;
}


public int getDerection() {
return derection;
}


public void setDerection(int derection) {
this.derection = derection;
}


}


@Override
protected void onDraw(Canvas canvas) {
System.out.println("               onDraw       ");
canvas.drawRect(0, 0, getWidth(), getHeight(), banck_paint);
// 初始化每一个圆


// 绘制员
for (circle c : circles) {
canvas.drawCircle(c.getX(), c.getY(), paopao_radius, circle_paint);
// canvas.drawCircle(10, 20,20, circle_paint);


}
if (myThread == null) {
myThread = new Mythread();
myThread.start();
}


}

}


//涉及到的属性

<?xml version="1.0" encoding="utf-8"?>
<resources>


    <declare-styleable name="CircleView">
        <attr name="circleSum" format="integer"></attr>
        <attr name="circleColor" format="color"></attr>
        <attr name="circleRadio" format="dimension"></attr>
        <attr name="backColor" format="color"></attr>
    </declare-styleable>


</resources>


//xml用法

 <com.example.sff.paopao
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        xmlt:backColor="#FFFFFF"
        xmlt:circleColor="#ff6600"
         xmlt:circleRadio="40dp"
        xmlt:circleSum="20" />

0 0
原创粉丝点击