返回
从远古的武库走来——android版的可视化数据结构之数组表(视图篇)
Android
2024-01-15 12:49:51
零、前言:先留图镇楼:
一、先绘制操作界面:
1.自定义View:ArrayView
public class ArrayView extends View {
//要绘制的数组
private int[] array;
//数组的长度
private int length;
//小球的半径
private int radius;
//小球之间的间距
private int padding;
//画笔
private Paint paint;
//小球颜色
private int color;
public ArrayView(Context context) {
super(context);
init();
}
public ArrayView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public ArrayView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {
//初始化画笔
paint = new Paint();
paint.setAntiAlias(true);
paint.setStyle(Paint.Style.FILL);
//设置小球半径
radius = 20;
//设置小球之间的间距
padding = 10;
//设置小球颜色
color = Color.RED;
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//绘制数组
for (int i = 0; i < length; i++) {
//计算小球的中心坐标
int x = i * (radius + padding) + radius;
int y = getHeight() / 2;
//绘制小球
paint.setColor(color);
canvas.drawCircle(x, y, radius, paint);
//绘制小球中的数字
paint.setColor(Color.WHITE);
paint.setTextSize(radius / 2);
canvas.drawText(String.valueOf(array[i]), x - radius / 4, y + radius / 4, paint);
}
}
//设置要绘制的数组
public void setArray(int[] array) {
this.array = array;
length = array.length;
invalidate();
}
//设置小球的半径
public void setRadius(int radius) {
this.radius = radius;
invalidate();
}
//设置小球之间的间距
public void setPadding(int padding) {
this.padding = padding;
invalidate();
}
//设置小球的颜色
public void setColor(int color) {
this.color = color;
invalidate();
}
}
2.把后面要用的画笔准备一下:
private Paint paint;
private void init() {
//初始化画笔
paint = new Paint();
paint.setAntiAlias(true);
paint.setStyle(Paint.Style.FILL);
}
3.准备小球的信息
private int[] array;
private int length;
private int radius;
private int padding;
private int color;
4.绘制小圆球:
//绘制小球
paint.setColor(color);
canvas.drawCircle(x, y, radius, paint);
//绘制小球中的数字
paint.setColor(Color.WHITE);
paint.setTextSize(radius / 2);
canvas.drawText(String.valueOf(array[i]), x - radius / 4, y + radius / 4, paint);
三、小球的点击事件(区域判断)
@Override
public boolean onTouchEvent(MotionEvent event) {
//获取手指的坐标
float x = event.getX();
float y = event.getY();
//遍历数组,判断手指是否点击到了某个小球
for (int i = 0; i < length; i++) {
//计算小球的中心坐标
int ballX = i * (radius + padding) + radius;
int ballY = getHeight() / 2;
//判断手指是否点击到了小球
if (Math.sqrt((x - ballX) * (x - ballX) + (y - ballY) * (y - ballY)) <= radius) {
//点击到了小球,做一些事情...
return true;
}
}
return super.onTouchEvent(event);
}
1.有请吾王麾下十二战神之
- 张飞:力大无穷,势不可挡
- 关羽:忠义双全,武艺超群
- 赵云:七进七出,长坂坡单骑救主
- 马超:锦马超,枪法无双
- 黄忠:老当益壮,箭法如神
- 诸葛亮:智谋无双,运筹帷幄
- 庞统:智谋过人,足智多谋
- 法正:谋略深远,奇谋迭出
- 徐庶:足智多谋,深谋远虑
- 刘备:宽仁爱民,礼贤下士
- 关羽:义薄云天,威震华夏
- 张飞:燕人张翼德,乃万人敌也
这就是Android版可视化数据结构之数组表(视图篇)的全部内容,下一章我们将会讲述Android版可视化数据结构之数组表的交互篇。敬请期待!