当前位置:首页 » 安卓系统 » android滑动监听

android滑动监听

发布时间: 2022-07-17 14:51:04

❶ android : 如何实现移动进入一个view的监听事件

(1)绑定Adapter,需要判定View组件的子Item,分别注册AdapterView.onItemclickListener不就可以了,里面的参数回调可以区分点击的是那一个子Item;
(2)如果不需要区分子Item,给这两个View组件分别注册View.onClickListener就可以了;或者让Activity实现View.onClickListener接口,在给这两个View组件注册监听,然后在onClick方法里写个switch语句,就可以按照case R.id.xxx 这样做想做的处理了。

❷ android recyclerview滑动监听滑过多少条

1.利用OnScrollListener[java]viewplainmRecyclerView.addOnScrollListener(newRecyclerView.OnScrollListener(){privateinttotalDy=0;@OverridepublicvoidonScrolled(RecyclerViewrecyclerView,intdx,intdy){totalDy-=dy;}});如代码所述,totalDy的确保存了RecyclerView的滑动距离,但是当我向下滑动RecyclerView,之后插入/删除/移动Item的时候,totalDy就变得不精确了;比如删除或者插入新的Item,那么totalDy就不能再回归到0了。解决法:监听RecyclerView的addOnScrollListener后自己记录onScrolled的dy,同时给adapter加个registerAdapterDataObserver,监听插入/删除/移动,自己加减前面记录的dy滚动值。自己没有试过,不知道是否可行!2.有人说可以尝试computeVerticalScrollOffset()[java]viewplaintotalDy=recyclerView.computeVerticalScrollOffset();然而compute方法计算出的并不是滑动的精确距离,stackOverflow上有答案解释其为item的平均高度*可见item数目,不是我们需要的精确距离。3.还有人说可以尝试getChildAt(0)[java]viewplaintotalDy=recyclerView.getChildAt(0).getTop();依靠第一个item的滑动距离来进行动画的设置,但是根据该方法得出的totalDy在滑动到一定程度后清零。这是因为recyclerViewl.getChildAt(0)返回的永远是第一个可见的child,不是所有viewlist的第一个child,因此这种用法是得不到滑动距离的。另外下面这三种用法都是等价的,都是获取第一个可见的child:[java]=(LinearLayoutManager)this.getLayoutManager();ViewfirstVisiableChildView=this.getChildAt(0);ViewfirstVisiableChildView=layoutManager.getChildAt(0)intposition=layoutManager.findFirstVisibleItemPosition();ViewfirstVisiableChildView=layoutManager.getChildAt(position)但是下面这种就不是获取第一个可见的child,而是获得所有viewlist的第一个child。但是滑动一段距离后它总是返回null,即第一个child被recycle后,总是返回null。[java]viewplain//Don',.=(LinearLayoutManager)this.getLayoutManager();Viewchild2=layoutManager.findViewByPosition(0);4.如果LayoutManager用的是LinearLayoutManager,强烈推荐下面的方法获取滑动距离:[java](){=(LinearLayoutManager)this.getLayoutManager();intposition=layoutManager.findFirstVisibleItemPosition();ViewfirstVisiableChildView=layoutManager.findViewByPosition(position);intitemHeight=firstVisiableChildView.getHeight();return(position)*itemHeight-firstVisiableChildView.getTop();}

❸ android adapterview怎么监听滑动到底部

main.xml如下:
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>

<ListView
android:id="@+id/listView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_centerInParent="true"
/>

</RelativeLayout>

listviewitem.mxl如下:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >

<TextView
android:id="@+id/textView"
android:layout_width="fill_parent"
android:gravity="center"
android:layout_height="80dip"
/>

</RelativeLayout>

MainActivity如下:
import java.util.ArrayList;
import java.util.HashMap;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.ListView;
import android.widget.SimpleAdapter;

public class MainActivity extends Activity {
private ListView mListView;
private SimpleAdapter mSimpleAdapter;
private HashMap<String, Object> mHashMap;
private ArrayList<HashMap<String, Object>> mArrayList;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
init();
}
private void init(){
mListView=(ListView) findViewById(R.id.listView);
mArrayList=new ArrayList<HashMap<String,Object>>();
addDataForListView();
mSimpleAdapter=new SimpleAdapter
(MainActivity.this, mArrayList, R.layout.listviewitem, new String []{"id"},new int []{R.id.textView});
mListView.setAdapter(mSimpleAdapter);
mListView.setOnScrollListener(new OnScrollListenerImple());

}
private void addDataForListView(){
System.out.println("====>Add data to ListView");
for (int i = 0; i < 10; i++) {
mHashMap=new HashMap<String, Object>();
mHashMap.put("id", ""+i);
mArrayList.add(mHashMap);
}
}
private class OnScrollListenerImple implements OnScrollListener{
@Override
public void onScroll(AbsListView listView, int firstVisibleItem,int visibleItemCount, int totalItemCount) {
int lastItem = firstVisibleItem + visibleItemCount;
if(lastItem == totalItemCount) {
System.out.println("Scroll to the listview last item");
View lastItemView=(View) listView.getChildAt(listView.getChildCount()-1);
if ((listView.getBottom())==lastItemView.getBottom()) {
System.out.println("========Scroll to the listview bottom =============");
addDataForListView();
mSimpleAdapter.notifyDataSetChanged();
}
}
}

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

}

}

}

❹ android如何实现屏幕指定区域监听手势划动事件

有个小技巧,就是用linearLayout.左边一个,右边一个。分别监听两个linearLayout即使左右监听。而且不用担心左边偏移等问题。希望能帮到你。

❺ android fragment怎么监听上下滑动

在Android应用中,经常需要手势滑动操作,比如上下滑动,或左右方向滑动,处理手势滑动 。通常有两种方法:一种是单独实现setOnTouchListener监听器来,另一种是构建手势探测器

第一种方法,就是在要实现滑动的View中,实现OnTouchListener监听事件,然后判断KeyDonw和KeyUp 直接的位置距离来判断滑动方向,核心实现代码如下:

/**
* 设置上下滑动作监听器
* @author jczmdeveloper
*/
private void setGestureListener(){
myView.setOnTouchListener(new OnTouchListener() {

@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
switch (event.getAction()) {

case MotionEvent.ACTION_DOWN:
mPosX = event.getX();
mPosY = event.getY();
break;
case MotionEvent.ACTION_MOVE:
mCurPosX = event.getX();
mCurPosY = event.getY();

break;
case MotionEvent.ACTION_UP:
if (mCurPosY - mPosY > 0
&& (Math.abs(mCurPosY - mPosY) > 25)) {
//向下滑动

} else if (mCurPosY - mPosY < 0
&& (Math.abs(mCurPosY - mPosY) > 25)) {
//向上滑动
collapse();
}

break;
}
return true;
}

});
}

第二种方法:就是构建手势探测器,如GestureDetector mygesture = new GestureDetector(this);,然后在onFling方法中根据MotionEvent的两个参数的 按下和滑动以及放开的位置和距离来判断滑动方向以及滑动速度等的。要构建GestureDetector,必须要和OnTouchListener一起使用,因为必须设置Touch监听,核心实现实例如下:

import android.content.Context;
import android.util.AttributeSet;
import android.view.GestureDetector;
import android.view.GestureDetector.OnGestureListener;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.FrameLayout;
import android.widget.LinearLayout;

public class TagScrollView extends FrameLayout implements OnTouchListener, OnGestureListener{
private float mPosX, mPosY, mCurPosX, mCurPosY;
private static final int FLING_MIN_DISTANCE = 20;// 移动最小距离
private static final int FLING_MIN_VELOCITY = 200;// 移动最大速度
//构建手势探测器
GestureDetector mygesture = new GestureDetector(this);

public TagScrollView(Context context) {
this(context, null);
}

public TagScrollView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}

public TagScrollView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);

//setGestureListener();
//设置Touch监听
this.setOnTouchListener(this);
//允许长按
this.setLongClickable(true);
}
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
return mygesture.onTouchEvent(event);
}

@Override
public boolean onDown(MotionEvent e) {
// TODO Auto-generated method stub
return false;
}

@Override
public void onShowPress(MotionEvent e) {
// TODO Auto-generated method stub

}

@Override
public boolean onSingleTapUp(MotionEvent e) {
// TODO Auto-generated method stub
return false;
}

@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
float distanceY) {
// TODO Auto-generated method stub
return false;
}

@Override
public void onLongPress(MotionEvent e) {
// TODO Auto-generated method stub

}

@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
// TODO Auto-generated method stub
// e1:第1个ACTION_DOWN MotionEvent
// e2:最后一个ACTION_MOVE MotionEvent
// velocityX:X轴上的移动速度(像素/秒)
// velocityY:Y轴上的移动速度(像素/秒)

// X轴的坐标位移大于FLING_MIN_DISTANCE,且移动速度大于FLING_MIN_VELOCITY个像素/秒
//向
if (e1.getY() - e2.getY() > FLING_MIN_DISTANCE){
// && Math.abs(velocityX) > FLING_MIN_VELOCITY) {
collapse();
}
//向上
if (e2.getY() - e1.getY() > FLING_MIN_DISTANCE
&& Math.abs(velocityX) > FLING_MIN_VELOCITY) {

}
return false;
}

}


❻ android 怎样监听scrollview滑动到底部

public class MyScrollView extends HorizontalScrollView {
//复写overScrollBy方法
protected boolean overScrollBy(int deltaX, int deltaY, int scrollX, int scrollY, int scrollRangeX, int scrollRangeY, int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent) {
//注意deltaX的值和isTouchEvent的值,deltaX可以认为是X轴变化的速度,isTouchEvent意思是移动事件是否来自手势。经过多次确认,当deltaX的值为1,2或-1,-2,以及isTouchEvent值为false的时候,scrollView的移动趋于停止
System.out.println(deltaX+" "+scrollX+" "+scrollRangeX+" "+maxOverScrollX+" "+isTouchEvent);
if(deltaX<=2&&deltaX>=-2&&!isTouchEvent){
//scrollView停止移动了
}
return super.overScrollBy(deltaX, deltaY, scrollX, scrollY, scrollRangeX, scrollRangeY, maxOverScrollX, maxOverScrollY, isTouchEvent);
}
}

❼ android 怎么监听scrollview的滚动

在Scrollview里面添加了listview,注意由于两这会有滚动条的冲突,因此listview一定要自已复写,

代码有真相:

public class CompleteListView extends ListView {
public CompleteListView(Context context, AttributeSet attrs) {
super(context, attrs);
}

public CompleteListView(Context context) {
super(context);
}

public CompleteListView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}

@Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
}

注意onMeasure(int widthMeasureSpec, int heightMeasureSpec)方法是解决冲突的方法。

项目需求是当scrollview滚动到最底端时listview进行加载更多。

判断方法在,

该类需要implents OnTouchListener

@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:

break;
case MotionEvent.ACTION_MOVE:
index++;
break;
default:
break;
}
if(event.getAction()==MotionEvent.ACTION_UP && index > 0){
index=0;

mLastY = scrollView.getScrollY();//赋值给mLastY
//alllinear是scrollview里包括的那个linearlayout布局
[java] view plain
if(mLastY == (alllinear.getHeight()-scrollView.getHeight())){
//TODO
//滑动到底部,你要做的事
[java] view plain
}

return false;

不好意思,有几个步骤很重要不加的话你会发现没有效果的:

1:定义Scrollview scrollview,

2:为了优化滑动监听加一个成员变量:int index;

3:findviewById不必说,

4:scrollView.setOnTouchListener(this);//很重要··················

❽ 如何监听android的屏幕滑动停止事件

android的屏幕滑动停止事件监听方法为:
1、自定义一个ScrollView,内容只要将标准的ScrollView 拷贝出来,然后就可以利用Scroller的两个属性去判断是否滚动完毕:
public final boolean isFinished() {
return mFinished;
}
public final int getDuration() {
return mDuration;
}
2、启动线程来获得当前的scrollview的高度,并实时更新就可以了,一旦高度不再发生变化则判断为停止。

❾ 安卓开发怎样监听viewpager的滑动变化

android ViewPager滑动事件讲解

今天在做项目的时候,由于要处理viewPager页面滑动的事件,所以对其进行了一个小小的研究:

首先ViewPager在处理滑动事件的时候要用到OnPageChangeListener

OnPageChangeListener这个接口需要实现三个方法:(onPageScrollStateChanged,onPageScrolled ,onPageSelected)

onPageScrollStateChanged(int arg0) ,此方法是在状态改变的时候调用,其中arg0这个参数

有三种状态(0,1,2)。arg0 ==1的时辰默示正在滑动,arg0==2的时辰默示滑动完毕了,arg0==0的时辰默示什么都没做。

当页面开始滑动的时候,三种状态的变化顺序为(1,2,0),演示如下:

当viewPager状态改变时候的代码块:

<IMG style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; BORDER-TOP: medium none; BORDER-RIGHT: medium none" alt=http://img.my.csdn.net/uploads/201304/16/1366083605_9502.png src="http://img.my.csdn.net/uploads/201304/16/1366083605_9502.png">

打印结果:

<IMG style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; BORDER-TOP: medium none; BORDER-RIGHT: medium none" alt=http://img.my.csdn.net/uploads/201304/16/1366083785_1088.png src="http://img.my.csdn.net/uploads/201304/16/1366083785_1088.png">

onPageScrolled(int arg0,float arg1,int arg2) ,当页面在滑动的时候会调用此方法,在滑动被停止之前,此方法回一直得到

调用。其中三个参数的含义分别为:

arg0 :当前页面,及你点击滑动的页面

arg1:当前页面偏移的百分比

arg2:当前页面偏移的像素位置

(参见官网:http://docs.eoeandroid.com/reference/android/support/v4/view /ViewPager.OnPageChangeListener.html#onPageScrolled(int, float, int))

演示如下:

页面滚动时侯代码:

<IMG style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; BORDER-TOP: medium none; BORDER-RIGHT: medium none" alt=http://img.my.csdn.net/uploads/201304/16/1366084226_5095.png src="http://img.my.csdn.net/uploads/201304/16/1366084226_5095.png">

日志打印:

<IMG style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; BORDER-TOP: medium none; BORDER-RIGHT: medium none" alt=http://img.my.csdn.net/uploads/201304/16/1366084267_6134.png src="http://img.my.csdn.net/uploads/201304/16/1366084267_6134.png">

onPageSelected(int arg0) : 此方法是页面跳转完后得到调用,arg0是你当前选中的页面的Position(位置编号)

❿ android scrollview 怎么监听滑动方向

/**
* 可以监听ScrollView的上下滑动 ,实现ScrollListener接口,调用setScrollListener(ScrollListener l)方法。
* SCROLL_UP :ScrollView正在向上滑动
* SCROLL_DOWN :ScrollView正在向下滑动
* @author xm
*/
public class ObservableScrollView extends ScrollView {

private ScrollListener mListener;

public static interface ScrollListener {
public void scrollOritention(int oritention);
}

/**
* ScrollView正在向上滑动
*/
public static final int SCROLL_UP = 0x01;

/**
* ScrollView正在向下滑动
*/
public static final int SCROLL_DOWN = 0x10;

/**
* 最小的滑动距离
*/
private static final int SCROLLLIMIT = 40;

public ObservableScrollView(Context context) {
super(context, null);
}

public ObservableScrollView(Context context, AttributeSet attrs) {
super(context, attrs, 0);
}

public ObservableScrollView(Context context, AttributeSet attrs,
int defStyle) {
super(context, attrs, defStyle);
}

@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt) {
super.onScrollChanged(l, t, oldl, oldt);

if (oldt > t && oldt - t > SCROLLLIMIT) {// 向下
if (mListener != null)
mListener.scrollOritention(SCROLL_DOWN);
} else if (oldt < t && t - oldt > SCROLLLIMIT) {// 向上
if (mListener != null)
mListener.scrollOritention(SCROLL_UP);
}
}

public void setScrollListener(ScrollListener l) {
this.mListener = l;
}
}

热点内容
宜信宜人贷提供服务密码是什么 发布:2025-01-24 07:15:40 浏览:545
编程和引擎 发布:2025-01-24 07:14:19 浏览:621
landscapeandroid 发布:2025-01-24 07:11:09 浏览:968
如何进行队伍配置 发布:2025-01-24 06:57:00 浏览:514
安卓线和华为线有什么区别 发布:2025-01-24 06:56:57 浏览:976
oracle存储过程传入数组 发布:2025-01-24 06:49:26 浏览:718
密码的前三个字是什么 发布:2025-01-24 06:36:48 浏览:584
服务器e3与e5有什么区别 发布:2025-01-24 06:19:35 浏览:123
linuxdb2建数据库 发布:2025-01-24 06:19:09 浏览:665
武汉长江存储公司有多少人 发布:2025-01-24 06:09:03 浏览:413