滚动ListView到点击的坐标,就像QQ一样

时间:2014-11-05 02:25:49

标签: android android-listview scroll

我想根据用户点击的位置滚动到特定项目。列表视图的所有项目都具有不同的高度。请看下面的图片。

Example Image

因此,如果用户点击列表项1,我们假设,所以它的底部应该滚动到软键盘的顶部。

项目和键盘的高度各不相同。我尝试了getTopgetHeightgetMeasuredHeight但到目前为止还没有任何工作。

1 个答案:

答案 0 :(得分:1)

Distance Formula

要点是找到点击的用户界面与键盘顶部之间的距离。

这是距离公式。您可以使用此功能实现功能。你需要

  • 点击坐标
  • 列表视图项的坐标
  • 列表视图项目的高度

假设以下是您正在点击的ListView

int[] loc = new int[2];
lvItem_button.getLocationOnScreen(loc);

在布局底部放置一个布局,在AdjustPan中将您的活动标记为Android Manifest,现在它将始终位于键盘的顶部,此时键盘将会打开。

以相同的方式获取它的坐标。

int[] cords= new int[2];
keyboard_top_layout.getLocationOnScreen(cords);


double distance = Math.sqrt(Math.pow((cords[0] - loc[0]), 2) + Math.pow((cords[1] - loc[1]), 2));

distance -= heightOfItem; //subtract height because we want to align bottom of item to top of keyboard



distance = Math.ceil(distance);
lvItem.smoothScrollBy((int) -distance, 500); //-distance because X is increasing at bottom and decreasing at top. 500 is delay in scrolling. so it's smooth scroll

全部完成:)