安卓控件的位置描述

1、获取控件在整个屏幕的绝对位置

则y坐标为可见的状态栏高度+可见的标题栏高度+view左上角到标题栏底部的距离.

private int[] getXY(View view){
		//View代表方法传入的控件
		int[] viewLocation = new int[2];
		view.getLocationInWindow(viewLocation);
		int viewX = viewLocation[0]; // x 坐标 
		int viewY = viewLocation[1]; // y 坐标
		return viewLocation;
	}

2、获取控件在父布局内的相对坐标

private void getParentReaXY(View view){
		int getLeft  = view.getLeft();
		int getTop = view.getTop();
		int getBottom = view.getBottom();
		int getRight = view.getRight();
	}

3、关于scrollTo(int x, int y)与scrollBy(int x, int y)与setScrollX(int value)

和setScrollY(int value)与getScrollX()与getScrollY()的关系

*有一点特别重要,scroll的坐标系统是和安卓屏幕的坐标系统反过来的,即左边箭头为X轴正轴,向上Y轴为正轴

eg;tv_info.scrollBy(-100, -50);是控件里面的内容向右平移了100px,向下平移了50px。反着亦反。

关系主要是看一下这几个方法的源码就很清楚,一下是源码,可以看到

scrollBy方法是对scrollTo方法的封装,直接调用scrollTo只会调用一次,但是调用scrollBy可以一直调用

以下是调用scrollTo的打印

tv_info.scrollBy(-100, -50);
int getScrollX = tv_info.getScrollX();
int getScrollY = tv_info.getScrollY();
Log.d(TAG, "getScrollX=="+getScrollX);
Log.d(TAG, "getScrollY=="+getScrollY);
//在getScrollX==-100;
getScrollY==-50;
再次点击
getScrollX==-200;
getScrollY==-100;
tv_info.scrollTo(-100, -50);
int getScrollX = tv_info.getScrollX();
int getScrollY = tv_info.getScrollY();
Log.d(TAG, "getScrollX=="+getScrollX);
Log.d(TAG, "getScrollY=="+getScrollY);
//在getScrollX==-100;
getScrollY==-50;
再次点击
getScrollX==-100;
getScrollY==-50;


public void setScrollX(int value) {
        scrollTo(value, mScrollY);
    }
public void scrollBy(int x, int y) {
        scrollTo(mScrollX + x, mScrollY + y);
    }
public void scrollTo(int x, int y) {
        if (mScrollX != x || mScrollY != y) {
            int oldX = mScrollX;
            int oldY = mScrollY;
            mScrollX = x;
            mScrollY = y;
            invalidateParentCaches();
            onScrollChanged(mScrollX, mScrollY, oldX, oldY);
            if (!awakenScrollBars()) {
                postInvalidateOnAnimation();
            }
        }
    }
public final int getScrollX() {
        return mScrollX;
    }
public final int getScrollY() {
        return mScrollY;
    }





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值