Android矩形点击效果
我在Android中创建了一个自定义视图,根据用户的愿望,它将显示不同数量的矩形,例如3x3Android矩形点击效果,android,android-custom-view,Android,Android Custom View,我在Android中创建了一个自定义视图,根据用户的愿望,它将显示不同数量的矩形,例如3x3 @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); int counter = -1; for (int w = 0; w < Rectangles; w++) { for (int h = 0; h < Rectangles; h++) {
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
int counter = -1;
for (int w = 0; w < Rectangles; w++) {
for (int h = 0; h < Rectangles; h++) {
Rect rect = new Rect(screen * h + rowDiv, screen * w + rowDiv + topPadding,
screen * (h + 1) - rowDiv, screen * (w + 1) - rowDiv + topPadding);
rectList.add(rect);
canvas.drawRect(rect, paint);
}
}
}
@覆盖
受保护的void onDraw(画布){
super.onDraw(帆布);
int计数器=-1;
对于(int w=0;w<矩形;w++){
对于(int h=0;h<矩形;h++){
Rect Rect=new Rect(屏幕*h+rowDiv,屏幕*w+rowDiv+topPadding,
屏幕*(h+1)-行分割,屏幕*(w+1)-行分割+行分割);
rectList.add(rect);
画布.drawRect(rect,paint);
}
}
}
这很好,在OnTouchListener中,如果用户按下一个矩形,我想给他反馈。当前,如果用户单击矩形,它将消失,但应该更改颜色
@Override
public boolean onTouchEvent(MotionEvent event) {
int touchX = (int) event.getX();
int touchY = (int) event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_MOVE:
break;
case MotionEvent.ACTION_DOWN:
for (int c = 0; c < rectList.size(); c++) {
if (rectList.get(c).contains(touchX, touchY)) {
selectedRect = rectList.get(c);
selectedRectInt = c;
}
}
break;
case MotionEvent.ACTION_UP:
if (selectedRect != null && selectedRectInt != -1)
if (selectedRect.contains(touchX, touchY) && rectListener != null){
rectListener.onClick(selectedRectInt);
invalidate(selectedRect);
}
selectedRect = null;
selectedRectInt = -1;
break;
}
return true;
}
@覆盖
公共布尔onTouchEvent(运动事件){
int touchX=(int)event.getX();
int touchY=(int)event.getY();
开关(event.getAction()){
case MotionEvent.ACTION\u移动:
打破
case MotionEvent.ACTION\u DOWN:
对于(int c=0;c
实现这一目标的最佳实践是什么?我必须通过调用invalidate()重新运行整个onDraw进程吗?只需回答您的问题:是的,您确实需要使用
invalidate()重新运行onDraw
进程
我是这样做的:
创建Paint
s的数组列表。您需要能够分配
每个矩形一个,这样您就可以用
正确的颜色。添加您可能需要的默认绘制颜色。因此,如果用户最多只能创建9个矩形,请添加9个相同初始颜色的油漆:
for (int i = 0; i < MAX_RECTS; i++) {
paintListName.add(new Paint());
paintListName.get(i).setColor(Color.BLACK); //Your default color
}
在onDraw
中,应创建每个矩形及其相关颜色:
canvas.drawRect(rect, paintListName.get(c));
非常感谢您的详细回答。
canvas.drawRect(rect, paintListName.get(c));