「滑动监听Java」滚动的天空

博主:adminadmin 2022-12-01 13:36:05 63

本篇文章给大家谈谈滑动监听Java,以及滚动的天空对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

如何判断Scrollview滚动条滚动到底部

如何判断Scrollview滚动条滚动到底部

网上查了许多资料,大部分都一样,跟着学了一个比较靠谱的,放在自己项目里没问题,我所实现的是在Scrollview里面添加了listview,注意由于两这会有滚动条的冲突,因此listview一定要自已复写,

代码有真相:

[java] view plaincopy

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

[java] view plaincopy

@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 plaincopy

if(mLastY == (alllinear.getHeight()-scrollView.getHeight())){

//TODO

//滑动到底部,你要做的事

[java] view plaincopy

}

return false;

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

1:定义Scrollview scrollview,

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

3:findviewById不必说,

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

出自:

android recyclerview滑动监听滑过多少条

1.利用OnScrollListener[java]viewplaincopymRecyclerView.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]viewplaincopytotalDy=recyclerView.computeVerticalScrollOffset();然而compute方法计算出的并不是滑动的精确距离,stackOverflow上有答案解释其为item的平均高度*可见item数目,不是我们需要的精确距离。3.还有人说可以尝试getChildAt(0)[java]viewplaincopytotalDy=recyclerView.getChildAt(0).getTop();依靠第一个item的滑动距离来进行动画的设置,但是根据该方法得出的totalDy在滑动到一定程度后清零。这是因为recyclerViewl.getChildAt(0)返回的永远是第一个可见的child,不是所有viewlist的第一个child,因此这种用法是得不到滑动距离的。另外下面这三种用法都是等价的,都是获取第一个可见的child:[java]viewplaincopyLinearLayoutManagerlayoutManager=(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]viewplaincopy//Don'tusethisfunctiontogetthefirstitem,itwillreturnnullwhenthefirstitemisrecycled.LinearLayoutManagerlayoutManager=(LinearLayoutManager)this.getLayoutManager();Viewchild2=layoutManager.findViewByPosition(0);4.如果LayoutManager用的是LinearLayoutManager,强烈推荐下面的方法获取滑动距离:[java]viewplaincopypublicintgetScollYDistance(){LinearLayoutManagerlayoutManager=(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=""

xmlns: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=""

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 HashMapString, Object mHashMap;

private ArrayListHashMapString, 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 ArrayListHashMapString,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 HashMapString, 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) {

}

}

}

关于滑动监听Java和滚动的天空的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

The End

发布于:2022-12-01,除非注明,否则均为首码项目网原创文章,转载请注明出处。