该控件通过sin函数图像变化实现动态,背景颜色和眼皮颜色一致,效果如下
//具体代码
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Point;
import android.os.Handler;
import android.util.AttributeSet;
import android.view.View;
/**
* 自定义的View类,为两个球的碰撞模拟
*/
class EyesJFrame extends View {
// 设置角度值,同时也就眼睛的横坐标长度
int angle = 250;
// 因为眨眼采用的sin()函数组成,所以其自然有幅值这一个属性。
int amplitude = 40;
// 创建一个用于保存幅值的变化的变量,采用amplitude的缩写ampl
int ampl = 0;
// 判断是否到了幅值的临界值,由线程维护
boolean flag = true;
// 定义中心点坐标
int centerX = 1024 / 2;
int centerY = 768 / 2;
// 创建统一的颜色背景
int color = Color.GRAY;
// 灰眼球的半径初始值
int blackBallSemi = 25;
Paint mPaint = new Paint();
Handler mhandler;
boolean first = true;
private int eyeDis = (int) (angle/2*1.5);//两眼距离
int degree = 0;//眼球转动角度
int leftX = centerX+eyeDis;//左眼初始化坐标
int RightX = centerX-eyeDis;//右眼初始化坐标
private Point pointLeft = new Point(),
pointRight = new Point(),
centerLeft = new Point(),//左右中心坐标
centerRight = new Point(),//右眼中心坐标
tempLeft = new Point(),//左眼球坐标
tempRight = new Point();//有眼球坐标
public EyesJFrame(Context context, AttributeSet attrs) {
super(context, attrs);
startRun();
mhandler = new Handler();
color = context.getColor(R.color.skin);//初始化背景颜色
}
@Override
protected void onMeasure(int widthMeasureSpec, int heig