當前位置:首頁 » 安卓系統 » 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

熱點內容
按鍵腳本優化 發布:2024-05-19 04:59:57 瀏覽:751
怎麼下載壓縮包 發布:2024-05-19 04:47:47 瀏覽:9
二嫂水仙ftp 發布:2024-05-19 04:47:42 瀏覽:160
雲隙伺服器下載 發布:2024-05-19 04:33:22 瀏覽:315
德國C語言 發布:2024-05-19 04:13:40 瀏覽:965
音頻管理器沒有文件夾 發布:2024-05-19 04:13:36 瀏覽:667
qq郵箱埠993伺服器怎麼填 發布:2024-05-19 04:07:05 瀏覽:204
javaapi框架 發布:2024-05-19 04:06:59 瀏覽:365
與存儲結構無關的術語 發布:2024-05-19 04:05:41 瀏覽:500
編譯路由器固件選擇 發布:2024-05-19 03:56:28 瀏覽:42