Java 坐标不对应

Java 坐标不对应,java,android,canvas,drawing,Java,Android,Canvas,Drawing,我是Android新手,我真的很难理解我的应用程序中发生了什么。 我正在尝试构建一个小游戏,其中一个圆圈出现在屏幕上,以随机位置出现,当用户单击它时,它就会消失。然后在另一个位置出现一个新的圆 问题是,比较用户点击的坐标和圆心的坐标,它们似乎完全不同… 问题似乎出在圆坐标上,因为如果我试图将它的位置强制到视图的中心,它会出现在一个完全错误的位置,在视图的右下角 我做错了什么 这是函数在视图中绘制圆的代码(与其父视图一样大) public void drawDots(){ 油漆=新油漆(); 油漆

我是Android新手,我真的很难理解我的应用程序中发生了什么。 我正在尝试构建一个小游戏,其中一个圆圈出现在屏幕上,以随机位置出现,当用户单击它时,它就会消失。然后在另一个位置出现一个新的圆

问题是,比较用户点击的坐标和圆心的坐标,它们似乎完全不同…
问题似乎出在圆坐标上,因为如果我试图将它的位置强制到视图的中心,它会出现在一个完全错误的位置,在视图的右下角

我做错了什么

这是函数在视图中绘制圆的代码(与其父视图一样大)

public void drawDots(){
油漆=新油漆();
油漆.色系颜色(颜色.洋红色);
Bitmap bg=Bitmap.createBitmap(480800,Bitmap.Config.ARGB_8888);
视图ll=(视图)findViewById(R.id.circle);
ll.背景(新位图绘制(bg));
centerX=rand.nextInt(ll.getWidth());
centerY=rand.nextInt(ll.getHeight());
画布=新画布(bg);
画布。绘制圆(中心、中心、半径、绘制);
Log.i(“点中心X:+centerX,“Y”+centerY”);
ll.setOnTouchListener(新视图.OnTouchListener(){
int x=0,y=0;
公共布尔onTouch(视图v,运动事件){
if(event.getAction()==MotionEvent.ACTION\u向下){
x=(int)event.getX();
y=(int)event.getY();
Log.i(“单击X:+X,单击Y:+Y”);
如果((x<(centerX+半径)和&x>(centerX-半径))&&((y>centerY+半径)和(y
这是布局图。启动计时器需要textview和按钮,但一旦用户单击开始按钮,它们就会从布局中删除

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">

<TextView
    android:id="@+id/timerValue"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_marginBottom="37dp"
    android:textSize="40sp"
    android:textColor="#ffffff"
    android:text="@string/timerVal" />

<Button
    android:id="@+id/startButton"
    android:layout_width="90dp"
    android:layout_height="45dp"
    android:layout_alignParentLeft="true"
    android:layout_centerVertical="true"
    android:layout_marginLeft="38dp"
    android:text="@string/startButtonLabel" />

<View android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:id="@+id/circle"/>

对不起,我的解释不好,但我甚至不知道问题出在哪里

我尝试了这个解决方案,它实际上改善了情况,但是如果我只考虑X轴,对于y轴来说,有任何对应关系,但是按这种方式,似乎点击的坐标完全超出范围… 尽管我实际上不明白为什么需要它

但问题在于:

centerX=rand.nextInt(ll.getWidth())

ll.getWidth()
返回
0
rand.nextInt()
将不起作用 当
ll.getWidth()
0

因此无法调用
nextInt(0)
。退房


要解决此问题,请进行检查:

if(ll.getWidth() == 0)
   centerX = 0;
else
   centerX = rand.nextInt(ll.getWidth());
但我不确定你在做什么,希望你能找到更好的解决方案

另一个例子也是如此,我仍然怀疑,
rand.nextInt(ll.getWidth())需要什么。(您可以编辑您的问题并明确您想要实现的目标)

作为一名新手,你编写的代码足够好,可以赢得更多的选票:)


~happycoding

我终于找到了问题所在:

Bitmap bg = Bitmap.createBitmap(480, 800, Bitmap.Config.ARGB_8888);
通过这个调用,我指定了一个宽度为480px、高度为800px的视图,而我的视图占据了整个父视图(即屏幕)。
这是一个相当新的错误,但我希望它能帮助其他人,因为我已经为此奋斗了两天!)

你能发布一个布局吗?谢谢你的回复和对代码的赞美。实际上,为了调试,我从无用的日志中“清理”了它,并检查了ll.getWidth()是否返回了正确的值(这意味着它返回656,因为我手机的屏幕宽度是720;对于高度,它返回1070,屏幕的总高度是1280。ll.getX和ll.getY都返回32,所以宽度看起来不错,但高度没有那么大……即使我认为它可能是活动条的空间).我想我是在问题中写的:我需要一个圆的随机位置,这就是需要的rand.nextInt。要将圆的中心更改为任何新的圆…不够清晰?我应该更好地解释它吗?
Bitmap bg = Bitmap.createBitmap(480, 800, Bitmap.Config.ARGB_8888);