public class FloatText extends FloatObject {
String text;
public FloatText(float posX, float posY, String text) {
super(posX, posY);
this.text = text;
setAlpha(88);
setColor(Color.WHITE);
}
@Override
public void drawFloatObject(Canvas canvas, float x, float y, Paint paint) {
paint.setTextSize(65);
canvas.drawText(text, x, y, paint);
}
}
public void drawFloatItem(Canvas canvas) {
switch (status) {
case START:
// fade in
if (isFade() && alpha <= ALPHA_LIMIT) {
paint.setAlpha(alpha);
alpha += ALPHA_PER_FRAME;
} else {
setStatus(MOVE);
}
break;
case MOVE:
// 更新赛贝尔曲线点
if (mCurDistance == 0) {
start = new PointF(x, y);
end = getRandomPoint((int)start.x, (int)start.y, (int) distance);// 取值范围distance
c1 = getRandomPoint((int)start.x, (int)start.y, random.nextInt(width / 2)); // 取值范围width/2
c2 = getRandomPoint(end.x, end.y, random.nextInt(width / 2));// 取值范围width/2
}
// 计算塞贝儿曲线的当前点
PointF bezierPoint = CalculateBezierPoint(mCurDistance / distance, start, c1, c2, end);
x = bezierPoint.x;
y = bezierPoint.y;
// 更新当前路径
mCurDistance += MOVE_PER_FRAME;
// 一段画完后重置
if (mCurDistance >= distance) {
mCurDistance = 0;
}
break;
case END:
// fade out
if (isFade() && alpha > 0) {
paint.setAlpha(alpha);
alpha -= ALPHA_PER_FRAME;
} else {
setStatus(FINISH);
}
break;
}
if (status != FINISH) {
Log.e("drawFloatObject", x+", "+y);
drawFloatObject(canvas, x ,y, paint);
}
}
private void initFloatObject(int width, int height) {
for (FloatObject floatObject : floats) {
int x = (int) (floatObject.posX * width);
int y = (int) (floatObject.posY * height);
floatObject.init(x, y, width, height);
}
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
for (FloatObject floatObject : floats) {
floatObject.drawFloatItem(canvas);
}
// 隔一段时间重绘一次, 动画效果
getHandler().postDelayed(runnable, DELAY);
}
// 重绘线程
private Runnable runnable = new Runnable() {
@Override
public void run() {
invalidate();
// 控制帧数
}
};
public void startFloat() {
for (FloatObject floatObject : floats) {
floatObject.setStatus(FloatObject.START);
}
}
public void endFloat() {
for (FloatObject floatObject : floats) {
floatObject.setStatus(FloatObject.END);
}
}
<com.dean.library.FloatBackground android:id="@+id/float_view" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_gravity="center" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <Button android:id="@+id/start" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="Start" /> <Button android:id="@+id/end" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="End" /> </LinearLayout> </com.dean.library.FloatBackground>
final FloatBackground floatBackground = (FloatBackground) this.findViewById(R.id.float_view);
Button start = (Button) this.findViewById(R.id.start);
start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
floatBackground.startFloat();
}
});
Button end = (Button) this.findViewById(R.id.end);
end.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
floatBackground.endFloat();
}
});
floatBackground.addFloatView(new FloatRect(0.2f, 0.3f, 30, 40));
floatBackground.addFloatView(new FloatBitmap( this, 0.2f, 0.3f, R.drawable.gr_ptn_03));
floatBackground.addFloatView(new FloatCircle( 0.8f, 0.8f));
floatBackground.addFloatView(new FloatText( 0.3f, 0.6f, "E"));
floatBackground.addFloatView(new FloatRing( 0.6f, 0.2f, 15 ,20));
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有