无法在Android App中获取按钮位置

时间:2019-03-22 20:39:01

标签: android android-layout

我试图在我的Android应用程序的RelativeLayout中获取按钮的中心位置。这样,我就可以在按钮的中心位置绘制脉冲发光动画,以在按钮的绝对像素位置下方发光。我已经尝试过getX();和getLocationOnScreen();并且都返回0。我尝试将按钮置于线性视图中,但仍无法获得屏幕上按钮位置的准确坐标。我还尝试运行onPostCreate()以确保在检查按钮位置之前它们在屏幕上。我想在应用程序启动时获取它们的位置,因此我可以创建一个动画在它们下面运行。似乎在onCreate期间无法确定Button的位置。我可能会缺少什么?

final Button playButton = findViewById(R.id.play);
        System.out.println(playButton.getX());
        playButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                play();
            }
        });

playButton.getX();
playButton.getY();

*AND*

int playLoc = int[2]
playLoc = playButton.getLocationOnScreen();

和XML布局文件:

<RelativeLayout>
     <android.support.v7.widget.AppCompatButton
            android:id="@+id/play"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:layout_above="@id/seekbar"
            android:layout_centerHorizontal="true"
            android:layout_gravity="center"
            android:background="@android:drawable/ic_media_play" />
</RelativeLayout>

1 个答案:

答案 0 :(得分:-1)

我找到了解决我问题的方法。我没有使用onPostCreate()方法,而是在onCreate()方法中使用了post方法(这是Button类的函数)来声明 AFTER 被绘制成具有相对布局的视图,这样我就可以在将按钮绘制到视图中后获得它们的位置。当在不同屏幕尺寸的设备上运行应用程序时,您将始终知道按钮绘制位置的坐标。

How get Button coordinate?

我希望这可以为人们节省我尝试解决此问题的时间!非常感谢Vektor88提供的解决方案!

这也是onCreate设置阶段的代码。这对我来说是正确的:

playButton = findViewById(R.id.play);
        playButton.post(new Runnable() {
            @Override
            public void run() {
                playx = playButton.getX();
                playy = playButton.getY();
                System.out.println("play x = " + playx + " play y = " + playy);
                circBm = Bitmap.createBitmap(playButton.getWidth(), playButton.getHeight(), Bitmap.Config.ARGB_8888);
            }
        });

注意

为什么我对此帖子的评价为负面?我觉得我给出了非常明确的帖子导致了答案,而且我不认为我应该被禁止回答。