private RelativeLayout root;
private BounceCircle messageCount;
private BounceCircle contactCount;
private ImageView messageIcon;
private ImageView contactIcon;
private int radius = 40; // 圆形半径
private boolean init = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
root = (RelativeLayout) findViewById(R.id.activity_main);
messageIcon = (ImageView) findViewById(R.id.message_icon);
contactIcon = (ImageView) findViewById(R.id.contact_icon);
@Override
public void on
WindowFocusChanged(boolean hasFocus) {
super.on
WindowFocusChanged(hasFocus);
// 只需执行一次,在on
WindowFocusChanged方法中才能获取到控件在屏幕中的坐标
if (init) {
init =false;
int[] position = new int[2];
messageIcon.get
LocationOn
Screen(position);
messageCount = new BounceCircle(this, radius, position[0] + messageIcon.getWidth(), (position[1] - Util.getTopBarHeight(this)));
messageCount.setNumber("20");
messageCount.setFinishListener(new BounceCircle.FinishListener() {
@Override
public void onFinish() {
Toast.makeText(MainActivity.this, "message count dismiss", Toast.LENGTH_LONG).show();
root.addView(messageCount);
contactIcon.get
LocationOn
Screen(position);
contactCount = new BounceCircle(this, radius, position[0] + contactIcon.getWidth(), (position[1] - Util.getTopBarHeight(this)));
contactCount.setNumber("30");
contactCount.setFinishListener(new BounceCircle.FinishListener() {
@Override
public void onFinish() {
Toast.makeText(MainActivity.this, "contract count dismiss", Toast.LENGTH_LONG).show();
root.addView(contactCount);
本文所有内容来自网络,通过本人梳理编撰成文。文章仅对知识要点做罗列整理,相当于知识目录,预期读者为具备相关开发经验的研发,不建议初学者阅读。如果需要进一步探究,可以查看参考资料查看原文。
屏幕坐标系:移动设备的坐标系一般定义屏幕的左上角为坐标原点,向右为X轴增大方向,向下为Y轴增大方向;
View坐标系:控件的坐标系是相对于父控件而言的,当然也可以通过getLocationOnScreen获取全局坐标;
事件坐标系:触摸事件的坐标提供了上述两个坐标系,即一个相对于整个手机屏幕的坐标,.
代码片段:
ImageView rectImage = findViewById(R.id.rect_image);
rectImage.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
Rect loc
在消息流中,根据ImageView是否在屏幕中出现了再决定是否加载;
在视频流页面,当视频滑入屏幕被用户可见时播放,滑出屏幕就自动停止播放等等;
网络请求数据,根据返回的数据结果控制相应View可见或不可见;
需要根据view是否可见或第一次可见,做特殊的处理,如埋点上报等操作。...
市面上的 APP 大多都有这个功能,我们这次做的新手高亮引导蒙层有什么特殊之处呢?
最基础的蒙层就是盖在页面的上方大概位置,不能精确定位。也不会随着 view 的变化蒙层的高亮区域和 tips 指示区域跟随底部 view 的位置变化而变化,也不能进行点击事件透传。一般都是点击蒙层后蒙层消失然后需要再次点击 view
我们这次开发的蒙层具备哪些功能,和解决了哪些技术难点,和市面上大多数蒙层博客有什么异同呢。
1 : 蒙层的高亮区域跟随底部目标 view ( 以下简称 targetView )
我们的 AP..
View的getTop()、getBottom()、getLeft()、getRight()获取的都是当前View相对于它的父类容器的顶部、底部、左边和右边的位置是相对位置
right = left + width;
bottom = top + height;
再来看一看getHeight(),getWidth(),他们是这样的
总结(正解
要动态获取 Android 中 View 的当前位置,可以使用以下方法:
1. 使用 `view.getLocationOnScreen()` 方法获取 View 在屏幕上的位置坐标。该方法返回一个包含左上角 x 和 y 坐标的数组。
```java
int[] location = new int[2];
view.getLocationOnScreen(location);
int x = location[0];
int y = location[1];
2. 使用 `view.getLocationInWindow()` 方法获取 View 在窗口中的位置坐标。该方法返回一个包含左上角 x 和 y 坐标的数组。
```java
int[] location = new int[2];
view.getLocationInWindow(location);
int x = location[0];
int y = location[1];
这两种方法都可以获得相对于屏幕或窗口左上角的坐标。你可以根据需要选择其中一种方法来获取 View 的当前位置。