View关于坐标的几个方法和属性

来源:互联网 发布:js删除节点本身 编辑:程序博客网 时间:2024/06/05 17:18

涉及到的方法一共有下面几个:

1.view获取自身原始的坐标:getLeft(),getTop(),getRight(),getBottom()

getLeft():获取到的是view自身的左边到其父布局左边的距离

getTop():获取到的是view自身的顶边到其父布局顶边的距离

getRight():获取到的是view自身的右边到其父布局左边的距离

getBottom():获取到的是view自身的底边到其父布局顶边的距离

2.view获取自身经过偏移后的坐标:getX(),getY()

getX():获取到的 mLeft+getTranslationX(),mLeft就是getLeft()的值

getY()获取到的 mTop+getTranslationY(),mTop就是getTop()的值

3.view获取自身的宽高:getHeight(),getWidth()

getHeight():获取到的 mTop-mBottom的值

getWidth():获取到的 mRight-mLeft的值

4.view获取内容的偏移量:getScrollX(),getScrollY()

5.view获取自身的偏移量:getTranslationX(),getTranslationY()

6.motionEvent获取点击事件的坐标:getX(),getY(),getRawX(),getRawY()

getX():获取点击事件相对控件左边的x轴坐标,即点击事件距离控件左边的距离

getY():获取点击事件相对控件顶边的y轴坐标,即点击事件距离控件顶边的距离

getRawX():获取点击事件相对整个屏幕左边的x轴坐标,即点击事件距离整个屏幕左边的距离

getRawY():获取点击事件相对整个屏幕顶边的y轴坐标,即点击事件距离整个屏幕顶边的距离

下面有一张从炸斯特的博客android之View坐标系(view获取自身坐标的方法和点击事件中坐标的获取)上copy过来的图,清晰明了地解释了以上的一些定义


我自己也写了一个demo

代码如下:

public class ViewTestActivity extends Activity implements View.OnClickListener {    private String TAG = "ViewTestActivity";    private View mSlider;    private View mScrolltoBtn;    private View mLayoutBtn;    private View mTranslateBtn;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_viewtest);        initView();    }    private void initView() {        mSlider = findViewById(R.id.slider);        mScrolltoBtn = findViewById(R.id.scrollto);        mLayoutBtn = findViewById(R.id.layout);        mTranslateBtn = findViewById(R.id.translate);        mScrolltoBtn.setOnClickListener(this);        mLayoutBtn.setOnClickListener(this);        mTranslateBtn.setOnClickListener(this);        mSlider.setOnClickListener(this);    }    @Override    public void onClick(View v) {        switch (v.getId()) {            case R.id.scrollto:                mSlider.scrollBy(0, 10);                break;            case R.id.layout:                RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) mSlider.getLayoutParams();                params.bottomMargin += 10;                mSlider.requestLayout();                break;            case R.id.translate:                ObjectAnimator translationY = ObjectAnimator.ofFloat(mSlider, "translationY", -500);                translationY.start();                break;            case R.id.slider:                Toast.makeText(ViewTestActivity.this, "I'm clicked", Toast.LENGTH_SHORT).show();                break;        }        Log.d(TAG, "top=" + mSlider.getTop());        Log.d(TAG, "y=" + mSlider.getY());        Log.d(TAG, "translationY=" + mSlider.getTranslationY());        Log.d(TAG, "scrollY=" + mSlider.getScrollY());        Log.d(TAG, "--------------------------------------------");    }}
页面布局如下:

<?xml version="1.0" encoding="utf-8"?><RelativeLayout    xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent">    <TextView        android:id="@+id/slider"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentBottom="true"        android:layout_centerHorizontal="true"        android:background="@android:color/holo_red_light"        android:gravity="center"        android:padding="30dp"        android:text="hello"        android:textSize="24dp"/>    <Button        android:id="@+id/scrollto"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentBottom="true"        android:text="scrollto"/>    <Button        android:id="@+id/layout"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_above="@+id/scrollto"        android:text="layout"/>    <Button        android:id="@+id/translate"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_above="@+id/layout"        android:text="translate"/></RelativeLayout>

在模拟器上跑起来之后是这样的:


有如下几个发现:

1.当我点击scrollto按钮的时候,根据log发现,只有scrollY的值发生了改变,从效果上来看就是红色滑块的内容hello向上偏移了,证明了scrollTo()(scrollBy()内部就是调用的srcollTo())只改变view的内容而非其本身。

2.当我点击layout按钮时,根据log发现,只有top和y的值发生了改变并且两个值始终一样,因为每次都是页面重新布局了,并没有内容的偏移,也没有view自身的偏移。

3.当我点击translate按钮时,根据log发现,top的值没变,y的值和translationY的值发生了改变,但是遵循y = top + translationY。

0 0
原创粉丝点击