【发布时间】:2024-04-30 00:10:02
【问题描述】:
对于我的 Pong 克隆,我正在尝试将自定义视图从 Ball 类绘制到 GamePanel 类中的视图上。 然而,在运行时它在屏幕上无处可见。
public class Ball extends View {
private float posX;
private float posY;
private float radius;
private Paint paint;
public Ball(Context context, float posX, float posY, float radius){
super(context);
this.posX = posX;
this.posY = posY;
this.radius = radius;
setWillNotDraw(false);
init();
}
private void init(){
paint = new Paint();
paint.setColor(Color.WHITE);
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawCircle(posX, posY, radius, paint);
}
现在这是我的班级 GamePanel。
public class GamePanel extends View implements GestureDetector.OnGestureListener{
private Context context;
//Screen height and width in pixels
private static int width;
private static int height;
private MainThread thread;
private Rect paddle1;
private Rect paddle2;
private Ball ball;
private Paint paint;
//Starting position paddle1
private int xPos1;
private int yPos1;
// Starting position paddle2
private int xPos2;
private int yPos2;
//Width and height of paddles
private int pWidth;
private int pHeight;
private GestureDetectorCompat gestureDetector;
public GamePanel(Context context) {
super(context);
this.context = context;
//Information we will need for positioning our objects inside the panel
DisplayMetrics displayMetrics = Resources.getSystem().getDisplayMetrics();
width = displayMetrics.widthPixels;
height = displayMetrics.heightPixels;
//Make the GamePanel focusable
setFocusable(true);
// Thread needs information about the game panel
thread = new MainThread(this);
pWidth = 100;
pHeight = height/2;
xPos1 = width/15;
yPos1 = 0;
xPos2 = width - xPos1 - pWidth;
yPos1 = 0;
paddle1 = new Rect(xPos1, yPos1, xPos1 + pWidth, yPos1 + pHeight);
paddle2 = new Rect(xPos2, yPos2, xPos2 + pWidth, yPos2 + pHeight);
paint = new Paint();
paint.setColor(Color.WHITE);
ball = new Ball(context, 300, 300, 300);
setBackgroundColor(Color.BLACK);
this.gestureDetector = new GestureDetectorCompat(context, this);
thread.setRunning(true);
thread.start();
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawRect(paddle1, paint);
canvas.drawRect(paddle2, paint);
}
我尝试在我的 MainThread 线程、GamePanel 的构造函数和 Ball 的构造函数中调用 invalidate() 和 postInvalidate()。球永远不会被拉到屏幕上。
如您所见,我已经在 Pong 中遇到了这个问题,因此我在 GamePanel 中创建了两个非常难看的矩形。
如何封装矩形和圆形(球),使其仍然可以在 Canvas 上绘制?
【问题讨论】:
标签: android android-studio canvas draw android-custom-view