Animation Curve

本文介绍了一个基于Android平台的应用实例,通过自定义View实现动态数据的实时更新与绘制,利用多线程技术和Handler机制来定时更新UI,展示了如何在Android应用中实现平滑的数据图表展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public class MainActivity extends Activity {
private int CODE = 0x0001;
private ZXView view;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
view = new ZXView(this);
setContentView(view);
new Thread() {
public void run() {
while (true) {
Message message = new Message();
message.what = CODE;
message.arg1 = (int) (Math.random() * 100);
handler.sendMessage(message);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
}.start();
}

private Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
if (msg.what == CODE) {
view.updata(msg.arg1);
}
};
};


class ZXView extends View {
private List<Float> list;
private int num = -1;
private int x = 35;
private int shu = 35;


public ZXView(Context context) {
super(context);
list = new ArrayList<Float>();
}


public void updata(float data) {
list.add(data);
if (num > 6) {
list.remove(0);
} else {
num += 1;
}
invalidate();
}


@Override
protected void onDraw(Canvas canvas) {
x = 30;
canvas.translate(10, 10);
Paint paint = new Paint();
paint.setStyle(Style.STROKE);
paint.setColor(Color.BLUE);
Path path = new Path();
int max;
if (num < 6) {
max = num;
} else {
max = 6;
}
if (num >= 0) {
path.moveTo(35 + max * shu, getHeight() - list.get(0) - 30);
canvas.drawCircle(35 + max * shu, getHeight() - list.get(0)
- 30, 10, paint);
canvas.drawText("" + list.get(0), 35 + max * shu, getHeight()
- list.get(0) - 40, paint);


for (int i = 1; i <= max; i++) {
path.lineTo(35 + (max - i) * shu, getHeight() - list.get(i)
- 30);
canvas.drawCircle(35 + (max - i) * shu,
getHeight() - list.get(i) - 30, 10, paint);
canvas.drawText("" + list.get(i), 35 + (max - i) * shu,
getHeight() - list.get(i) - 40, paint);
}
canvas.drawPath(path, paint);
}
super.onDraw(canvas);
}
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值