導航:首頁 > 操作系統 > 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滾動到指定位置相關的資料

熱點內容
精通編程入門 瀏覽:14
99單片機原理 瀏覽:59
linuxssh互信 瀏覽:288
支持128加密的瀏覽器 瀏覽:292
程序員下載器 瀏覽:48
退出雲伺服器代碼 瀏覽:900
軍狀如命令 瀏覽:263
如何安卓系統更新 瀏覽:74
linux命令在哪裡輸入 瀏覽:497
編程語言集合類怎麼選 瀏覽:93
如何將pdf轉化為word 瀏覽:11
邁克菲隔離區解壓密碼 瀏覽:785
怎麼用偉福編譯 瀏覽:867
計算機演算法專家 瀏覽:501
什麼app清理垃圾 瀏覽:643
android流媒體伺服器 瀏覽:183
各種演算法的時間復雜度是指 瀏覽:116
幫助高考生緩解壓力 瀏覽:850
自媒體聚合APP需要什麼資質 瀏覽:487
求標准體重的演算法 瀏覽:740