首页 > 其他 > 详细

项目是儿童教育游戏 有些动画需要XY坐标 而在oncreate获取到的是0 如何获取oncreate的坐标等 自己记录一下(出处:网络)

时间:2020-09-14 09:21:40      阅读:54      评论:0      收藏:0      [点我收藏+]

技术分享图片

 

 

View 的 getLeft() 和 getRight() 和 getTop() 和 getBottom()分别对应的是哪些坐标:

top 是左上角纵坐标,left 是左上角横坐标,right 是右下角横坐标,bottom 是右下角纵坐标

 

创建了一个测试项目来获取View位置,在onCreate中获取到的位置为0。

xml的内容

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ffffff"
    tools:context="com.pistol.viewtest.MainActivity">

    <TextView
        android:id="@+id/tv_position"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="5dp"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"/>

</android.support.constraint.ConstraintLayout>

Activity代码如下:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    tvPosition = (TextView) findViewById(R.id.tv_position);
    Log.e("onCreate", "````````````````````````````````````````");
    Log.e("Left", "=" + tvPosition.getLeft());
    Log.e("Top", "=" + tvPosition.getTop());
    Log.e("Right", "=" + tvPosition.getRight());
    Log.e("Bottom", "=" + tvPosition.getBottom());
}

结果:

03-22 15:10:47.440 18055-18055/com.pistol.viewtest E/onCreate: ````````````````````````````````````````
03-22 15:10:47.440 18055-18055/com.pistol.viewtest E/Left: =0
03-22 15:10:47.440 18055-18055/com.pistol.viewtest E/Top: =0
03-22 15:10:47.441 18055-18055/com.pistol.viewtest E/Right: =0
03-22 15:10:47.441 18055-18055/com.pistol.viewtest E/Bottom: =0技术分享图片

 

如何可以在oncreate中获取呢

方法一:

private void measureOne() {
    ViewTreeObserver vto = tvPosition.getViewTreeObserver();
    vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
        @Override
        public boolean onPreDraw() {
            //防止二次调用
            tvPosition.getViewTreeObserver().removeOnPreDrawListener(this);
            
            Log.e("onPreDraw", "````````````````````````````````````````");
            Log.e("Left", "=" + tvPosition.getLeft());
            Log.e("Top", "=" + tvPosition.getTop());
            Log.e("Right", "=" + tvPosition.getRight());
            Log.e("Bottom", "=" + tvPosition.getBottom());
            return true;
        }
    });
}

我用的方法一

结果:

03-22 15:10:47.502 18055-18055/com.pistol.viewtest E/onPreDraw: ````````````````````````````````````````
03-22 15:10:47.502 18055-18055/com.pistol.viewtest E/Left: =413
03-22 15:10:47.506 18055-18055/com.pistol.viewtest E/Top: =803
03-22 15:10:47.506 18055-18055/com.pistol.viewtest E/Right: =668
03-22 15:10:47.506 18055-18055/com.pistol.viewtest E/Bottom: =890

 

方法二:

private void measureTwo() {
    ViewTreeObserver vto = tvPosition.getViewTreeObserver();
    vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            //防止二次调用
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
                tvPosition.getViewTreeObserver().removeOnGlobalLayoutListener(this);
            } else {
                tvPosition.getViewTreeObserver().removeGlobalOnLayoutListener(this);
            }
            Log.e("onGlobalLayout", "````````````````````````````````````````");
            Log.e("Left", "=" + tvPosition.getLeft());
            Log.e("Top", "=" + tvPosition.getTop());
            Log.e("Right", "=" + tvPosition.getRight());
            Log.e("Bottom", "=" + tvPosition.getBottom());
        }
    });
}

结果:

技术分享图片03-22 15:10:47.501 18055-18055/com.pistol.viewtest E/onGlobalLayout: ````````````````````````````````````````
03-22 15:10:47.502 18055-18055/com.pistol.viewtest E/Left: =413
03-22 15:10:47.502 18055-18055/com.pistol.viewtest E/Top: =803
03-22 15:10:47.502 18055-18055/com.pistol.viewtest E/Right: =668
03-22 15:10:47.502 18055-18055/com.pistol.viewtest E/Bottom: =890

 

项目是儿童教育游戏 有些动画需要XY坐标 而在oncreate获取到的是0 如何获取oncreate的坐标等 自己记录一下(出处:网络)

原文:https://www.cnblogs.com/zhangxuetao/p/13664844.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!