android 弹性view,Android自定义View实现弹性小球效果

照例先看效果图

6882fb173894af9bb66f85fec201b361.gif

自定义代码示例

public class BezierView extends View {

Paint paint;//画笔

Path path;//路径

int radius = 50;//圆的半径

int time = 100;//计数时长

int index;

int offsetIndex;

float viewX, viewY;//图形中心点坐标

float width;//屏幕宽度

float partWidth;//屏幕宽度的1/4

int paddingLeft, paddingRight;//图形内边距

float x1, y1, x2, y2, x3, y3, x4, y4;//圆形左上右下四个点

float x12, y12, x23, y23, x34, y34, x41, y41;//圆形左上右下四个点之间的渐变点

public BezierView(Context context) {

this(context, null);

}

public BezierView(Context context, AttributeSet attrs) {

this(context, attrs, 0);

}

public BezierView(Context context, AttributeSet attrs, int defStyleAttr) {

super(context, attrs, defStyleAttr);

paint = new Paint();

paint.setColor(ResourcesCompat.getColor(getResources(), R.color.colorPrimary, null));

paint.setAntiAlias(true);

}

@Override

protected void onDraw(Canvas canvas) {

paddingLeft = getPaddingLeft();

paddingRight = getPaddingRight();

width = getWidth() - paddingLeft - paddingRight;

partWidth = width / 4;

path = new Path();

path.moveTo(x1, y1);

path.cubicTo(x1, y1, x12, y12, x2, y2);

path.cubicTo(x2, y2, x23, y23, x3, y3);

path.cubicTo(x3, y3, x34, y34, x4, y4);

path.cubicTo(x4, y4, x41, y41, x1, y1);

canvas.drawPath(path, paint);

move();

}

public void move() {

new Timer().schedule(new TimerTask() {

@Override

public void run() {

if (index < time - 1) {

index++;

viewX = width / time * index + paddingLeft;

viewY = 400;

x1 = viewX - radius;

x2 = viewX;

x3 = viewX + radius;

x4 = viewX;

y1 = viewY;

y2 = viewY - radius;

y3 = viewY;

y4 = viewY + radius;

offsetIndex = index % (time / 4) + 1;

//根据图形移动到的区域进行曲线变化

float position = (viewX - paddingLeft) / partWidth;

//右边半圆

if (position >= 0 && position < 1) {

x3 = viewX + radius + radius / (time / 4) * offsetIndex;

} else if (position >= 1 && position < 2) {

x3 = viewX + radius + radius;

} else if (position >= 2 && position < 3) {

x3 = viewX + radius + radius - radius / (time / 4) * offsetIndex;

} else {

x3 = viewX + radius;

}

x23 = x34 = x3;

y12 = y23 = y2;

//左边半圆

if (position >= 1 && position < 2) {

x1 = viewX - radius - radius / (time / 4) * offsetIndex;

} else if (position >= 2 && position < 3) {

x1 = viewX - radius - radius;

} else if (position >= 3) {

x1 = viewX - radius - radius + radius / (time / 4) * offsetIndex;

} else {

x1 = viewX - radius;

}

x12 = x41 = x1;

y34 = y41 = y4;

postInvalidate();

} else {

cancel();

}

}

}, 0, 5000);

}

}

总结

以上就是Android自定义View实现弹性小球效果的全部内容,希望对大家开发Android能带来一定的帮助,如果有疑问大家可以留言交流。谢谢大家对我们的支持。

时间: 2016-09-03

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值