当前位置 博文首页 > 文章内容

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

    作者: 栏目:未分类 时间:2020-09-14 9:00:31

    本站于2023年9月4日。收到“大连君*****咨询有限公司”通知
    说我们IIS7站长博客,有一篇博文用了他们的图片。
    要求我们给他们一张图片6000元。要不然法院告我们

    为避免不必要的麻烦,IIS7站长博客,全站内容图片下架、并积极应诉
    博文内容全部不再显示,请需要相关资讯的站长朋友到必应搜索。谢谢!

    另祝:版权碰瓷诈骗团伙,早日弃暗投明。

    相关新闻:借版权之名、行诈骗之实,周某因犯诈骗罪被判处有期徒刑十一年六个月

    叹!百花齐放的时代,渐行渐远!



     

     

    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