「滑动监听Java」滚动的天空
本篇文章给大家谈谈滑动监听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和滚动的天空的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
发布于:2022-12-01,除非注明,否则均为
原创文章,转载请注明出处。