我试图在我的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>
答案 0 :(得分:-1)
我找到了解决我问题的方法。我没有使用onPostCreate()方法,而是在onCreate()方法中使用了post方法(这是Button类的函数)来声明 AFTER 被绘制成具有相对布局的视图,这样我就可以在将按钮绘制到视图中后获得它们的位置。当在不同屏幕尺寸的设备上运行应用程序时,您将始终知道按钮绘制位置的坐标。
我希望这可以为人们节省我尝试解决此问题的时间!非常感谢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);
}
});
注意
为什么我对此帖子的评价为负面?我觉得我给出了非常明确的帖子导致了答案,而且我不认为我应该被禁止回答。