当前位置:首页 » 安卓系统 » android滚动事件

android滚动事件

发布时间: 2022-09-06 03:25:28

‘壹’ android listview 为什么会自动触发滚动事件 我还没滚动事件就触发了

是不是你的ListView里数据改变了,你不动是不会出发滚动事件的

‘贰’ android的touch事件怎么获取滚动距离

可以设置ListView的滚动事件
ListView.setOnScrollListener(OnScrollListener listener)

OnScrollListener是滚动事件监听接口
有两个需要实现的方法
public void onScrollStateChanged(AbsListView view, int scrollState) ;
public void onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, int totalItemCount) ;

几个参数的意义分别为
AbsListView view所监听的listview对象

int firstVisibleItem能看见的第一个item的位置

int visibleItemCount能看见的item的数量

int totalItemCount所有item的总数

代码如下,我们在onScroll中进行判断
lvMatch.setOnScrollListener(new OnScrollListener() {

@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}

@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
if(firstVisibleItem == 0){
//已滚动到最顶部
}
if(firstVisibleItem+visibleItemCount == totalItemCount){
//滚动到底部
}
}
});

‘叁’ android 的ListView中,如何判断其内容已滚动到最顶部或者最底部

是通过ListView的OnScrollListener事件中判断的。当listView滚动的时候就会回调OnScrollListener方法。

以下为示例代码(完整代码查看附件):

  1. 得到lisView实例

ListViewlistView = (ListView) findViewById(R.id.listview);


2.给ListView注册OnScrollListener事件

listView.setOnScrollListener(new OnScrollListenerImple());


3.实现OnScrollListener 接口,处理事件。

private class OnScrollListenerImple implements OnScrollListener {

@Override

public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {

//如果当前列表的数量等于查询的总数量,则不做任何操作

if(mSimpleAdapter.getCount() >= page.getRowCount()){

return;

}

if (view.getLastVisiblePosition() == (totalItemCount - 1)) { //判断是否滑动到最底部

//已经滑动最底部了。

}

}


@Override

public void onScrollStateChanged(AbsListView view, int scrollState) {

}

}


‘肆’ android 模拟滑动事件,用代码实现

用这个包java.awt.Robot

mouseMove()方法

当前位置点击后 调mouseMove() 到目标位置 不就相当于滑动么

‘伍’ 如何解决Android中WebView上下滑动事件

getScrollY()方法返回的是当前可见区域的顶端距整个页面顶端的距离,也就是当前内容滚动的距离。
getHeight()或者getBottom()方法都返回当前webview这个容器的高度
getContentHeight返回的是整个html的高度,但并不等同于当前整个页面的高度,因为webview有缩放功能,所以当前整个页面的高度实际上应该是原始html的高度再乘上缩放比例。
因此,更正后的结果,准确的判断方法应该是:

if(webview.getContentHeight*webview.getScale() -(webvi ew.getHeight()+webview.getScrollY())){
//已经chǔ于底端
}

‘陆’ workspace android 怎么去掉滑动事件

Launcher桌面的一大功能就是支持左右滑动,这样的功能在现在的应用中使用非常广泛,并且有很多实现的方式,可以通过使用Fragment来实现也可以通过自定义的控件来实现。
Launcher采用了后者,这一功能的实现在Workspace来完成。首先来看一下Workspace的继承关系:

从图中可以看出Workspace是PagedView的子类,而实际上滑动功能的实现是在PagedView中实现的。在Launcher中,Workspace中有五个CellLayout,分别代表五个分屏。
当左右拖动CellLayout时,就能实现滑动的效果。但实际上CellLayout中还有其他的子View,PagedView是如何避免了来自子View的干扰的呢?这里就需要讨论另一个问题,Android对touch事件的拦截制度。而拦截发生在ViewGroup的onInterceptTouchEvent()和onTouchEvent()以及View的onTouchEvent中。当发生touch事件时,系统会产生一个MotionEvent并且沿着View Tree开始传递。首先获取MotionEvent是View Tree的根节点,根节点通常是一个ViewGroup,ViewGroup将在onInterceptTouchEvent()中获取MotionEvent并决定是否继续向下传递。当在ViewGroup.onInterceptEvent()中返回true时,将截获MotionEvent,View Tree下面的View将无法获得MotionEvent,转而交给当前ViewGroup的onTouchEvent()方法。如果onTouchEvent中返回false,那么MotionEvent将沿着View Tree向上传给上一层。拦截的过程草图如下:

有了touch事件的拦截机制之后,View tree中的各个层之间的分工也就更加明确了。在Launcher的View tree中,从上到下的主要的节点有,DragLayer,Workspace,CellLayout。DragLayer层的主要任务是负责对图标和AppWidget进行拖拽,Workspace则主要负责左右滑动,CellLayout则用于容纳各种桌面的快捷方式。大概的分工如下:

那么现在就进入PagedView中去了解实现的过程吧。
滑动功能主要分两步:1、在onInterceptTouchEvent中进行拦截。2、在onTouchEvent中进行滑动。

1,onInterceptTouchEvent(MotionEvent en)
在这个方法中,决定了什么时候截获MotionEvent来实现滑动,避免了子View的其他事件的影响(如点击事件)。
[java] view plain
public boolean onInterceptTouchEvent(MotionEvent ev) {
/**
* This method JUST determines whether we want to intercept the motion.
* If we return true, onTouchEvent will be called and we do the actual
* scrolling there.
**/

//获取速度跟踪器,记录各个时刻的速度。并且添加当前的MotionEvent以记录更行速度值。
(ev);
......
/**
* Shortcut the most recurring case: the user is in the dragging
* state and he is moving his finger. We want to intercept this
* motion.
* 最常见的需要拦截的情况:用户已经进入滑动状态,并且正在滑动手指。
* 对这种情况直接进行拦截,执行onTouchEvent()继续执行滑动操作。
**/
final int action = ev.getAction();
if ((action == MotionEvent.ACTION_MOVE) &&
(mTouchState == TOUCH_STATE_SCROLLING)) {
return true;
}

switch (action & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_MOVE: {

/**
* mIsBeingDragged == false, otherwise the shortcut would have caught it. Check
* whether the user has moved far enough from his original down touch.
*/
/**
* 当在这里接受到ACTION_MOVE时,说明mTouchState!=TOUCH_STATE_SCROLLING并且mIsBeingDragged的值应该为false,
* 否则DragLayer就应该截获了MotionEvent用于实现拖拽。
* 此时还没有进入滑动状态,当mActivePointerId == INVALID_POINTER时,也就是在此之前没有接收到任何touch事件。
* 这种情况发生在Workspace变小时,也就是之前Workspace处于SPRING_LOADED状态。当出现这种情况时直接把当前的事件当作ACTION_DOWN进行处理。
* 反之,则通过determineScrollingStart()尝试能够进入滑动状态。
*/
if (mActivePointerId != INVALID_POINTER) {
determineScrollingStart(ev);
break;
}
// if mActivePointerId is INVALID_POINTER, then we must have missed an ACTION_DOWN
// event. in that case, treat the first occurence of a move event as a ACTION_DOWN
// i.e. fall through to the next case (don't break)
// (We sometimes miss ACTION_DOWN events in Workspace because it ignores all events
// while it's small- this was causing a crash before we checked for INVALID_POINTER)
}

case MotionEvent.ACTION_DOWN: {
final float x = ev.getX();
final float y = ev.getY();
// Remembe

热点内容
数据库数据的一致性 发布:2025-01-11 17:30:45 浏览:707
手机怎么设置手势安卓 发布:2025-01-11 17:15:54 浏览:964
威能壁挂炉解压阀 发布:2025-01-11 17:15:53 浏览:559
突破服务器ip限制 发布:2025-01-11 17:11:23 浏览:818
支付宝上传凭证 发布:2025-01-11 17:10:29 浏览:876
怎么打开行李箱的密码锁 发布:2025-01-11 17:09:51 浏览:593
苹果怎么删除id账号和密码 发布:2025-01-11 17:09:50 浏览:784
7z解压很慢 发布:2025-01-11 16:51:23 浏览:942
电脑改文档服务器 发布:2025-01-11 16:41:14 浏览:870
编译汇编语言实例 发布:2025-01-11 16:36:55 浏览:671