导航:首页 > 操作系统 > android滚动到指定位置

android滚动到指定位置

发布时间:2022-06-21 05:38:20

‘壹’ android 的ListView中怎么判断其内容已滚动到最顶部或者最底部

  1. 可以通过判断流动条的位置得到;

  2. 如果在顶部,第零个item必然可见;

  3. 如果在底部,最大个数减1 item必须可见;

  4. ,具体见代码:

java">listview.setOnScrollListener(newAbsListView.OnScrollListener(){@Override
(AbsListViewview,intscrollState){
switch(scrollState){
//当不滚动时
caseAbsListView.OnScrollListener.SCROLL_STATE_IDLE:
//判断滚动到底部
if(listview.getLastVisiblePosition()==(listview.getCount()-1)){
L.e("滚动到底部");
}
//判断滚动到顶部
if(listview.getFirstVisiblePosition()==0){

}
break;
}
}

@Override
publicvoidonScroll(AbsListViewview,intfirstVisibleItem,intvisibleItemCount,inttotalItemCount){

}
});

‘贰’ android 中dropdownmenu怎么滚动到指定位置

方法/步骤: 1、依次进入手机“设置”->“无线和网络”->“WLAN管理”界面。 2、按手机上的“菜单”按键,从弹出的扩展面板中点击“高级”按钮。 3、接着勾选“使用静态IP”项,并输入“IP地址”、“网关”和“网络掩码”。 4、按手机上的“菜单”按键,从弹出的扩展面板中点击“保存”按钮。

‘叁’ Android 如何 ListView 判断滚动到最顶部或者底部

可以设置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 linearlayout如何自动滚到底部

方案:

1、需要在LinearLayout外部包裹上ScrollView

2、设置ScrollView滚动到底部

代码示例:

布局示意:
<ScrollView
android:id="@+id/scroll_view">
<LinearLayout>
</LinearLayout>
</ScrollView>
java中调用
ScrollViewsv=(ScrollView)findViewById(R.id.scroll_view);//获取scrollView组件
sv.fullScroll(ScrollView.FOCUS_DOWN);//滚动到底部

‘伍’ android如何让ScrollView的滚动条定位到最后一行

单独定义一个静态方法,建立一个线程判断滚动条的内层外层高度变化。
ScrollView
scrollresult=(ScrollView)findViewById(R.id.scrollView);
scroll2Bottom(scrollresult,
txthistroycontent);//txthistroycontent为滚动条关联的文本框
public
static
void
scroll2Bottom(final
ScrollView
scroll,
final
View
inner)
{
Handler
handler
=
new
Handler();
handler.post(new
Runnable()
{
@Override
public
void
run()
{
//
TODO
Auto-generated
method
stub
if
(scroll
==
null
||
inner
==
null)
{
return;
}
//
内层高度超过外层
int
offset
=
inner.getMeasuredHeight()
-
scroll.getMeasuredHeight();
if
(offset
<
0)
{
System.out.println("定位...");
offset
=
0;
}
scroll.scrollTo(0,
offset);
}
});
}
}

‘陆’ android 带排序的recyleview怎么滑动到指定的item

Question

最近在写 SideBar 的时候遇到一个问题,当执行 Recyclerview 的 smoothScrollToPosition(position) 的时候,Recyclerview 看上去并没有滚动到指定位置。

Analysis

当然,这并不是方法的bug,而是 smoothScrollToPosition(position) 的执行效果有三种情况,需要区分。

·目标position在第一个可见项之前 。

这种情况调用smoothScrollToPosition能够平滑的滚动到指定位置,并且置顶。

·目标position在第一个可见项之后,最后一个可见项之前。

这种情况下,调用smoothScrollToPosition不会有任何效果···

·目标position在最后一个可见项之后。

这种情况调用smoothScrollToPosition会把目标项滑动到屏幕最下方···

‘柒’ android listview如何按时加滚动到顶部

listview的一些方法:

1.public
void setSelection (int position)

position位置的item置顶(即position位置的item到listview的最顶端),但是,没有从原来位置到顶端的滑动效果。

2.public
void setSelectionFromTop (int position, int y)

与setSelection 类似。setSelection(position)就是setSelectionFromTop (position,0)

选中position指定的项目,并将所选项置于距离ListView顶端y像素的位置

参数

position 需要选中的项目的索引(从0开始)

y
距离ListView(包括间隙)顶端的位置

3.public
void smoothScrollToPositionFromTop (int position, int
offset)

平滑滚动到指定的适配器位置。 指定位置的视图会滚动到相对顶边偏移 offset 像素的位置显示。
如果无法做到(比如该偏移量会使首尾条目超越列表边缘),会滚动到尽量接近的位置。

参数

position 滚动到的位置

offset 滚动结束时,指定 position 条目距离视图顶部的像素数

当offset=0时,可以把position位置的item置顶,而且带有滑动效果,即会从原来位置轻轻滑动到最顶

端位置。

测试:
可以顺利滚动,返回滚动也很顺利,滑动顺畅

4、public void
smoothScrollToPositionFromTop(int position)

参数:

position 滚动到的位置

带有滑动效果的滚动到指定位置。

如何判断其内容已滚动到最顶部或者最底部看

getListView().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){
Log.e("log", "滑到顶部");
}
if(visibleItemCount+firstVisibleItem==totalItemCount){
Log.e("log", "滑到底部");
}
}
});

平滑的滚动listview到一个指定位

package com.android.contacts.widget;

import android.content.Context;

import android.util.AttributeSet;

import android.widget.ListView;

public class AutoScrollListView extends ListView {

private static final
float PREFERRED_SELECTION_OFFSET_FROM_TOP = 0.33f;

private int
mRequestedScrollPosition = -1;

private boolean
mSmoothScrollRequested;

public
AutoScrollListView(Context context) {

super(context);

}

public
AutoScrollListView(Context context, AttributeSet attrs) {

super(context, attrs);

}

public
AutoScrollListView(Context context, AttributeSet attrs, int
defStyle) {

super(context, attrs, defStyle);

}

public void
requestPositionToScreen(int position, boolean smoothScroll) {

mRequestedScrollPosition = position;

mSmoothScrollRequested = smoothScroll;

requestLayout();

}

@Override

protected void
layoutChildren() {

super.layoutChildren();

if (mRequestedScrollPosition == -1) {

return;

}

final int position =
mRequestedScrollPosition;

mRequestedScrollPosition = -1;

int firstPosition = getFirstVisiblePosition() +
1;

int lastPosition =
getLastVisiblePosition();

if (position >= firstPosition &&
position <= lastPosition) {

return; //
Already on screen

}

final int offset = (int) (getHeight() *
PREFERRED_SELECTION_OFFSET_FROM_TOP);

if (!mSmoothScrollRequested) {

setSelectionFromTop(position, offset);

// Since
we have changed the scrolling position, we need to redo child
layout

// Calling
"requestLayout" in the middle of a layout pass has no effect,

// so we
call layoutChildren explicitly

super.layoutChildren();

} else {

// We will
first position the list a couple of screens before or after

// the new
selection and then scroll smoothly to it.

int
twoScreens = (lastPosition - firstPosition) * 2;

int
preliminaryPosition;

if
(position < firstPosition) {

preliminaryPosition = position + twoScreens;

if (preliminaryPosition >=
getCount()) {

preliminaryPosition = getCount() - 1;

}

if (preliminaryPosition <
firstPosition) {

setSelection(preliminaryPosition);

super.layoutChildren();

}

} else
{

preliminaryPosition =
position - twoScreens;

if (preliminaryPosition <
0) {

preliminaryPosition = 0;

}

if
(preliminaryPosition > lastPosition) {

setSelection(preliminaryPosition);

super.layoutChildren();

}

}

smoothScrollToPositionFromTop(position, offset);

}

}

}

‘捌’ Android 让listview滑动到指定的的位置,这个位置不在当前界面,怎么实现

Intent intent = new Intent(); intent.setClass(**.this, **.activity); startActivity(intent); (**.this, **.activity) 第一个为当前activity,第二个为想要跳转的activity

‘玖’ android recyclerview 是否能上滑动

使用RecyclerView时,调用smoothScrollToPostion()方法滑动到指定位置,但是条目很多时滑动的很慢,本篇文章就是实现RecyclerView的快速滑动。
先介绍如何实现,然后再介绍原理。
实现代码创建FastScrollLinearLayoutManager,继承LinearLayoutManager复moothScrollToPosition()方法,主要复写LinearSmoothScroller中方法
代码如下,解释全在注释中:
public class FastScrollLinearLayoutManager extends LinearLayoutManager {
public FastScrollLinearLayoutManager(Context context) { super(context);
} @Override
public void smoothScrollToPosition(RecyclerView recyclerView, RecyclerView.State state, int position) {
LinearSmoothScroller linearSmoothScroller = new LinearSmoothScroller(recyclerView.getContext()) { @Override
public PointF (int targetPosition) { return FastScrollLinearLayoutManager.this.(targetPosition);
} //该方法控制速度。
//if returned value is 2 ms, it means scrolling 1000 pixels with LinearInterpolation should take 2 seconds.
@Override
protected float calculateSpeedPerPixel(DisplayMetrics displayMetrics) { /*
mdpi上, 1英寸有160个像素点, 25/160,
xxhdpi,1英寸有480个像素点, 25/480,
*/
//return 10F / displayMetrics.densityDpi;//可以减少时间,默认25F
return super.calculateSpeedPerPixel(displayMetrics);
//Calculates the time it should take to scroll the given distance (in pixels)
protected int calculateTimeForScrolling(int dx) { /*
控制距离, 然后根据上面那个方(calculateSpeedPerPixel())提供的速度算出时间,默认一次 滚动 TARGET_SEEK_SCROLL_DISTANCE_PX = 10000个像素, 在此处可以减少该值来达到减少滚动时间的目的.
*/
//间接计算时提高速度,也可以直接在calculateSpeedPerPixel提高
if (dx > 3000) {
dx = 3000;
} int time = super.calculateTimeForScrolling(dx);
LogUtil.d(time);//打印时间看下
}
};
linearSmoothScroller.setTargetPosition(position);
startSmoothScroll(linearSmoothScroller);
}
从复写的两个方法可以看出,都是为了提高滑动速度。一种是直接修改速度,另外一种是通过减少距离来减少所需时间,间接提高滑动速度。
这两种方法都可以,看自己所需。接下来就讲讲实现的原理。这块我只是梳理的大致的流程,不过至此你已经可以实现快速滑动了。
2. RecyclerView 滑动过程梳理
1.调用RecyclerView.smoothScrollToPosition(position)时public void moothScrollToPosition(int position) { //...直接调用了LayoutManage的该方法
}1234
2.LinearLayoutManager中@Override
public void smoothScrollToPosition(RecyclerView recyclerView, RecyclerView.State state, int position) {
LinearSmoothScroller linearSmoothScroller = new LinearSmoothScroller(recyclerView.getContext()) { //...
}; //设置终点位置
linearSmoothScroller.setTargetPosition(position); //开始滚动,使用LinearSmoothScroller(一直匀速滑动,当targetPosition出现在屏幕上时再减速滑动),startSmoothScroll()是LayoutManager中的方法
startSmoothScroll(linearSmoothScroller);
}1234567891011
3.LayoutManager中public void startSmoothScroll(SmoothScroller smoothScroller) { //...
mSmoothScroller = smoothScroller; //调用SmoothScroller.start()方法开始滚动,this参数指当前LayoutManager
mSmoothScroller.start(mRecyclerView, this);
}123456
4.SmoothScroller中
void start(RecyclerView recyclerView, LayoutManager layoutManager) { //...
//使用ViewFlinger进行动画,ViewFlinger实现了Runnable接口,并且内部使用了Scroller,这样就可以post自己进而对RecyclerView不断layout就可以实现滑动
mRecyclerView.mViewFlinger.postOnAnimation();
}12345
5.ViewFlinger中,这是实现滑动的重点,省略了很多代码逻辑
private class ViewFlinger implements Runnable {
@Override
public void run() { if (scroller.computeScrollOffset()) { //调用SmoothScroller的onAnimation方法
smoothScroller.onAnimation(dx - overscrollX, dy - overscrollY);
}
}
}123456789
6.SmoothScroller中private void onAnimation(int dx, int dy) { //...
if (mTargetView != null) { // verify target position
if (getChildPosition(mTargetView) == mTargetPosition) { //要滑动到的位置已经显示在屏幕上,onTargetFound()方法里update了差值器,由线性差值器变成了减速的差值器。
onTargetFound(mTargetView, recyclerView.mState, mRecyclingAction);
mRecyclingAction.runIfNecessary(recyclerView);
} //...
if (mRunning) { //再下一次滑动
onSeekTargetStep(dx, dy, recyclerView.mState, mRecyclingAction); //调用内部类Action的runIfNecessary方法
mRecyclingAction.runIfNecessary(recyclerView);
}
}12345678910111213141516171819
7.Action中 private void runIfNecessary(RecyclerView recyclerView) { //调用了ViewFlinger.smoothScrollBy()方法,并传入了mDuration,mDuration是在SmoothScroller中upDate()时传入的,就是由前文讲的两个方法共同决定的
recyclerView.mViewFlinger.smoothScrollBy(mDx, mDy, mDuration, mInterpolator);
}1234
8.ViewFlinger中开始滚动 public void smoothScrollBy(int dx, int dy, int ration, Interpolator interpolator) { if (mInterpolator != interpolator) {
mInterpolator = interpolator;
mScroller = ScrollerCompat.create(getContext(), interpolator);
}
setScrollState(SCROLL_STATE_SETTLING);
mLastFlingX = mLastFlingY = 0; //调用Scroller开始滚动,此处即ration
mScroller.startScroll(0, 0, dx, dy, ration);
postOnAnimation();
}1234567891011
这块粗略的按照流程说了一下滚动过程,涉及的类比较多,最终通过Scroller来进行滚动。
结语:本篇文章实现了RecyclerView的快速滚动,但需要注意一个问题:如果你的Item比较复杂,滚动起来会卡顿。 这个在看源码时的一个注释里面有提到,后来实践时确实也发现。不得不说微信朋友圈滑动起来的真的快,它用的是ListView,貌似开启了FastEnable属性。 同时也可以仿照知乎,先使用RecyclerView.scrollToPosition(position)直接滑动到某一个位置后再使用smoothScrollToPosition(0)滑动到顶部。这块在RecyclerView里的Action类中jumpTo()的注释里有提到,如果很远的话可以先到一个位置后再滑动。

‘拾’ android 当onScroll()方法被执行时让滚动的位置固定

如果是ListView中的话你可以用setSelection()方法。

举例:如果你要跳到第三个item的位置的话

listview.setSelection(2);

@Override
publicvoidsetSelection(intposition){
setSelectionFromTop(position,0);
}
position参数:Index(startingat0)ofthedataitemtobeselected.
从0开始表示item的位置。
阅读全文

与android滚动到指定位置相关的资料

热点内容
安卓手机上的文件怎么拷贝到电脑 浏览:761
教你一个解压神器 浏览:399
压垮程序员的bug 浏览:347
cad成面命令 浏览:913
php文件内容清空 浏览:867
服务器管理为什么要云帮手 浏览:638
mac命令行粘贴 浏览:140
java17api中文下载 浏览:431
带spi的单片机 浏览:94
node项目编译桌面程序 浏览:319
163服务器没有响应什么意思 浏览:964
怎么看编译器是32位还是64位 浏览:665
程序员试题百度云 浏览:839
谈论不同的解压方法 浏览:572
如何透明加密 浏览:594
如何将电脑变成一台服务器 浏览:251
秒学汉字app怎么样 浏览:517
中兴r10路由器恢复出厂命令 浏览:1000
私密照放加密软件 浏览:688
手机外接硬盘文件夹 浏览:419