Android java Listview scroll automatic a slow time
I have a listview with some elements, I have to make this list scroll automatically, with a slow scroll.
When he reaches the last element he stops.
If new items are added in the queue, then the listview must restart, until it reaches the last element again.
Any suggestions?
java android listview android-listview
add a comment |
I have a listview with some elements, I have to make this list scroll automatically, with a slow scroll.
When he reaches the last element he stops.
If new items are added in the queue, then the listview must restart, until it reaches the last element again.
Any suggestions?
java android listview android-listview
2
Still ListView? UseRecyclerView
for better performance.
– Piyush
Nov 16 '18 at 7:04
add your code and also used listview instand of recyclerview. recyclerview it is latest.
– Android Team
Nov 16 '18 at 7:04
add a comment |
I have a listview with some elements, I have to make this list scroll automatically, with a slow scroll.
When he reaches the last element he stops.
If new items are added in the queue, then the listview must restart, until it reaches the last element again.
Any suggestions?
java android listview android-listview
I have a listview with some elements, I have to make this list scroll automatically, with a slow scroll.
When he reaches the last element he stops.
If new items are added in the queue, then the listview must restart, until it reaches the last element again.
Any suggestions?
java android listview android-listview
java android listview android-listview
asked Nov 16 '18 at 7:02
PaulPaul
151210
151210
2
Still ListView? UseRecyclerView
for better performance.
– Piyush
Nov 16 '18 at 7:04
add your code and also used listview instand of recyclerview. recyclerview it is latest.
– Android Team
Nov 16 '18 at 7:04
add a comment |
2
Still ListView? UseRecyclerView
for better performance.
– Piyush
Nov 16 '18 at 7:04
add your code and also used listview instand of recyclerview. recyclerview it is latest.
– Android Team
Nov 16 '18 at 7:04
2
2
Still ListView? Use
RecyclerView
for better performance.– Piyush
Nov 16 '18 at 7:04
Still ListView? Use
RecyclerView
for better performance.– Piyush
Nov 16 '18 at 7:04
add your code and also used listview instand of recyclerview. recyclerview it is latest.
– Android Team
Nov 16 '18 at 7:04
add your code and also used listview instand of recyclerview. recyclerview it is latest.
– Android Team
Nov 16 '18 at 7:04
add a comment |
3 Answers
3
active
oldest
votes
I suggest, thought your adapter implemented in effective way. so this code is just scrolls listview
you need to try another values of variables
final long totalScrollTime = Long.MAX_VALUE; //total scroll time. I think that 300 000 000 years is close enouth to infinity. if not enought you can restart timer in onFinish()
final int scrollPeriod = 20; // every 20 ms scoll will happened. smaller values for smoother
final int heightToScroll = 20; // will be scrolled to 20 px every time. smaller values for smoother scrolling
listView.post(new Runnable() {
@Override
public void run() {
new CountDownTimer(totalScrollTime, scrollPeriod ) {
public void onTick(long millisUntilFinished) {
listView.scrollBy(0, heightToScroll);
}
public void onFinish() {
//you can add code for restarting timer here
}
}.start();
}
});
It seems to work, but strange things happen. I'll explain I have 21 items. The elements 20,19,18,17 flow exclusively. All others do not appear in scrolling. Another problem is that being that they make a listView.scrollBy when the last items arrive they disappear. The thing I would like to do is block it, do not let it flow anymore until there are no other elements. Something like this: i.imgur.com/NXDjShM.jpg
– Paul
Nov 16 '18 at 7:37
you can check the last visible item of listView and interrupt the timer to stop Scrolling and if you want infinite scroll the you can restart it. and also read the comments in code for better implementation.
– Aniruddh Parihar
Nov 16 '18 at 7:43
But it does not solve at the moment because only 4 elements of 21 flow. I also tried to use: listView.setSelection (adapter.getCount () - 1); But it does not work.
– Paul
Nov 16 '18 at 7:47
In the meantime I'm trying to think if we can add the following feature: pastebin.com/QiiXtgT2 That when I go up the listview it stops, if I go down she continues. But it seems that it does not work properly or I'm wrong maybe something.
– Paul
Nov 16 '18 at 7:57
add a comment |
use the below method to scroll your listview. for example:
scrollMyTableView(activityListview,11,0,getTotalHeightofListView(activityListview),0);
method:
private void scrollMyTableView(View v,final int var, int fromY, int toY, int delay){
ObjectAnimator objectAnimator = ObjectAnimator.ofInt(v, "scrollY", fromY, toY).setDuration(2000);
objectAnimator.setStartDelay(delay);
objectAnimator.start();
objectAnimator.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {}
@Override
public void onAnimationEnd(Animator animation) {
}
@Override
public void onAnimationCancel(Animator animation) {}
@Override
public void onAnimationRepeat(Animator animation) {}
});
}
and if new item added to adapter and need to again go to top of listview and again come back to bottom.you can use below code to do this:
myAdapter.registerDataSetObserver(new DataSetObserver() {
@Override
public void onChanged() {
super.onChanged();
activityListview.setSelection(0);
scrollMyTableView(activityListview,11,0,getTotalHeightofListView(activityListview),0);
}
});
To calculate the height of listview use below method
public int getTotalHeightofListView(ListView listView) {
ListAdapter mAdapter = listView.getAdapter();
int totalHeight = 0;
for (int i = 0; i < mAdapter.getCount(); i++) {
View mView = mAdapter.getView(i, null, listView);
mView.measure(
View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),
View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
totalHeight += mView.getMeasuredHeight();
}
return totalHeight;
}
I tried the code, it does not seem to work properly. I also tried to replace: ListAdapter mAdapter = listView.getAdapter (); Directly with the adapter I use in the listview, nothing changes. In the video, I used the solution with: ListAdapter mAdapter = listView.getAdapter (); scrollMyTableView (listView, 11, 0, getTotalHeightofListView (listView), 10000); ObjectAnimator objectAnimator = ObjectAnimator.ofInt (v, "scrollY", fromY, toY) .setDuration (8000);
– Paul
Nov 16 '18 at 13:04
Video: drive.google.com/file/d/1EKrU_3DeMdpzMR61z1zyPsxaDan0xjpv/view In the first part of the videos you can see, what I'm trying to achieve. The number of elements in the list are 21, [0-20]. As you can see from the video appear only 4 items from 20 to 17. If you pay attention you can see that the scroll in this case drops. As you can see if I click on the elements, all of them appear at the beginning of the element head 20.
– Paul
Nov 16 '18 at 13:05
In the second part of the video the one on Youtube is what I would like to implement as a solution. There are a series of messages, elements of the listview. If I get on top I can see the old messages, if in the meantime are added new messages in the queue nothing happens, because I climbed up to see the old ones. If instead I redeem, then until the last element of the list and in the meantime that I am at the end, are added new messages in the listview the list scrolls. Minute [1.11-1.5] at the end of the video.
– Paul
Nov 16 '18 at 13:05
I have seen the video. The above code can give exactly the solution of your problem. I have already implemented in my project. you need to just change according to your project code.
– kumud kala
Nov 19 '18 at 5:20
It would be possible to see I do not know the video of what you have implemented in your project to understand how you did? Or some portion of code? These are days that I look for solutions, for how to solve these problems.
– Paul
Nov 19 '18 at 20:23
|
show 3 more comments
Use listview smoothScrollToPosition(int position)
function.
Please have a look on this post also
https://www.codota.com/code/java/methods/android.widget.ListView/smoothScrollToPosition
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53332949%2fandroid-java-listview-scroll-automatic-a-slow-time%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
3 Answers
3
active
oldest
votes
3 Answers
3
active
oldest
votes
active
oldest
votes
active
oldest
votes
I suggest, thought your adapter implemented in effective way. so this code is just scrolls listview
you need to try another values of variables
final long totalScrollTime = Long.MAX_VALUE; //total scroll time. I think that 300 000 000 years is close enouth to infinity. if not enought you can restart timer in onFinish()
final int scrollPeriod = 20; // every 20 ms scoll will happened. smaller values for smoother
final int heightToScroll = 20; // will be scrolled to 20 px every time. smaller values for smoother scrolling
listView.post(new Runnable() {
@Override
public void run() {
new CountDownTimer(totalScrollTime, scrollPeriod ) {
public void onTick(long millisUntilFinished) {
listView.scrollBy(0, heightToScroll);
}
public void onFinish() {
//you can add code for restarting timer here
}
}.start();
}
});
It seems to work, but strange things happen. I'll explain I have 21 items. The elements 20,19,18,17 flow exclusively. All others do not appear in scrolling. Another problem is that being that they make a listView.scrollBy when the last items arrive they disappear. The thing I would like to do is block it, do not let it flow anymore until there are no other elements. Something like this: i.imgur.com/NXDjShM.jpg
– Paul
Nov 16 '18 at 7:37
you can check the last visible item of listView and interrupt the timer to stop Scrolling and if you want infinite scroll the you can restart it. and also read the comments in code for better implementation.
– Aniruddh Parihar
Nov 16 '18 at 7:43
But it does not solve at the moment because only 4 elements of 21 flow. I also tried to use: listView.setSelection (adapter.getCount () - 1); But it does not work.
– Paul
Nov 16 '18 at 7:47
In the meantime I'm trying to think if we can add the following feature: pastebin.com/QiiXtgT2 That when I go up the listview it stops, if I go down she continues. But it seems that it does not work properly or I'm wrong maybe something.
– Paul
Nov 16 '18 at 7:57
add a comment |
I suggest, thought your adapter implemented in effective way. so this code is just scrolls listview
you need to try another values of variables
final long totalScrollTime = Long.MAX_VALUE; //total scroll time. I think that 300 000 000 years is close enouth to infinity. if not enought you can restart timer in onFinish()
final int scrollPeriod = 20; // every 20 ms scoll will happened. smaller values for smoother
final int heightToScroll = 20; // will be scrolled to 20 px every time. smaller values for smoother scrolling
listView.post(new Runnable() {
@Override
public void run() {
new CountDownTimer(totalScrollTime, scrollPeriod ) {
public void onTick(long millisUntilFinished) {
listView.scrollBy(0, heightToScroll);
}
public void onFinish() {
//you can add code for restarting timer here
}
}.start();
}
});
It seems to work, but strange things happen. I'll explain I have 21 items. The elements 20,19,18,17 flow exclusively. All others do not appear in scrolling. Another problem is that being that they make a listView.scrollBy when the last items arrive they disappear. The thing I would like to do is block it, do not let it flow anymore until there are no other elements. Something like this: i.imgur.com/NXDjShM.jpg
– Paul
Nov 16 '18 at 7:37
you can check the last visible item of listView and interrupt the timer to stop Scrolling and if you want infinite scroll the you can restart it. and also read the comments in code for better implementation.
– Aniruddh Parihar
Nov 16 '18 at 7:43
But it does not solve at the moment because only 4 elements of 21 flow. I also tried to use: listView.setSelection (adapter.getCount () - 1); But it does not work.
– Paul
Nov 16 '18 at 7:47
In the meantime I'm trying to think if we can add the following feature: pastebin.com/QiiXtgT2 That when I go up the listview it stops, if I go down she continues. But it seems that it does not work properly or I'm wrong maybe something.
– Paul
Nov 16 '18 at 7:57
add a comment |
I suggest, thought your adapter implemented in effective way. so this code is just scrolls listview
you need to try another values of variables
final long totalScrollTime = Long.MAX_VALUE; //total scroll time. I think that 300 000 000 years is close enouth to infinity. if not enought you can restart timer in onFinish()
final int scrollPeriod = 20; // every 20 ms scoll will happened. smaller values for smoother
final int heightToScroll = 20; // will be scrolled to 20 px every time. smaller values for smoother scrolling
listView.post(new Runnable() {
@Override
public void run() {
new CountDownTimer(totalScrollTime, scrollPeriod ) {
public void onTick(long millisUntilFinished) {
listView.scrollBy(0, heightToScroll);
}
public void onFinish() {
//you can add code for restarting timer here
}
}.start();
}
});
I suggest, thought your adapter implemented in effective way. so this code is just scrolls listview
you need to try another values of variables
final long totalScrollTime = Long.MAX_VALUE; //total scroll time. I think that 300 000 000 years is close enouth to infinity. if not enought you can restart timer in onFinish()
final int scrollPeriod = 20; // every 20 ms scoll will happened. smaller values for smoother
final int heightToScroll = 20; // will be scrolled to 20 px every time. smaller values for smoother scrolling
listView.post(new Runnable() {
@Override
public void run() {
new CountDownTimer(totalScrollTime, scrollPeriod ) {
public void onTick(long millisUntilFinished) {
listView.scrollBy(0, heightToScroll);
}
public void onFinish() {
//you can add code for restarting timer here
}
}.start();
}
});
answered Nov 16 '18 at 7:14
Aniruddh PariharAniruddh Parihar
2,21911129
2,21911129
It seems to work, but strange things happen. I'll explain I have 21 items. The elements 20,19,18,17 flow exclusively. All others do not appear in scrolling. Another problem is that being that they make a listView.scrollBy when the last items arrive they disappear. The thing I would like to do is block it, do not let it flow anymore until there are no other elements. Something like this: i.imgur.com/NXDjShM.jpg
– Paul
Nov 16 '18 at 7:37
you can check the last visible item of listView and interrupt the timer to stop Scrolling and if you want infinite scroll the you can restart it. and also read the comments in code for better implementation.
– Aniruddh Parihar
Nov 16 '18 at 7:43
But it does not solve at the moment because only 4 elements of 21 flow. I also tried to use: listView.setSelection (adapter.getCount () - 1); But it does not work.
– Paul
Nov 16 '18 at 7:47
In the meantime I'm trying to think if we can add the following feature: pastebin.com/QiiXtgT2 That when I go up the listview it stops, if I go down she continues. But it seems that it does not work properly or I'm wrong maybe something.
– Paul
Nov 16 '18 at 7:57
add a comment |
It seems to work, but strange things happen. I'll explain I have 21 items. The elements 20,19,18,17 flow exclusively. All others do not appear in scrolling. Another problem is that being that they make a listView.scrollBy when the last items arrive they disappear. The thing I would like to do is block it, do not let it flow anymore until there are no other elements. Something like this: i.imgur.com/NXDjShM.jpg
– Paul
Nov 16 '18 at 7:37
you can check the last visible item of listView and interrupt the timer to stop Scrolling and if you want infinite scroll the you can restart it. and also read the comments in code for better implementation.
– Aniruddh Parihar
Nov 16 '18 at 7:43
But it does not solve at the moment because only 4 elements of 21 flow. I also tried to use: listView.setSelection (adapter.getCount () - 1); But it does not work.
– Paul
Nov 16 '18 at 7:47
In the meantime I'm trying to think if we can add the following feature: pastebin.com/QiiXtgT2 That when I go up the listview it stops, if I go down she continues. But it seems that it does not work properly or I'm wrong maybe something.
– Paul
Nov 16 '18 at 7:57
It seems to work, but strange things happen. I'll explain I have 21 items. The elements 20,19,18,17 flow exclusively. All others do not appear in scrolling. Another problem is that being that they make a listView.scrollBy when the last items arrive they disappear. The thing I would like to do is block it, do not let it flow anymore until there are no other elements. Something like this: i.imgur.com/NXDjShM.jpg
– Paul
Nov 16 '18 at 7:37
It seems to work, but strange things happen. I'll explain I have 21 items. The elements 20,19,18,17 flow exclusively. All others do not appear in scrolling. Another problem is that being that they make a listView.scrollBy when the last items arrive they disappear. The thing I would like to do is block it, do not let it flow anymore until there are no other elements. Something like this: i.imgur.com/NXDjShM.jpg
– Paul
Nov 16 '18 at 7:37
you can check the last visible item of listView and interrupt the timer to stop Scrolling and if you want infinite scroll the you can restart it. and also read the comments in code for better implementation.
– Aniruddh Parihar
Nov 16 '18 at 7:43
you can check the last visible item of listView and interrupt the timer to stop Scrolling and if you want infinite scroll the you can restart it. and also read the comments in code for better implementation.
– Aniruddh Parihar
Nov 16 '18 at 7:43
But it does not solve at the moment because only 4 elements of 21 flow. I also tried to use: listView.setSelection (adapter.getCount () - 1); But it does not work.
– Paul
Nov 16 '18 at 7:47
But it does not solve at the moment because only 4 elements of 21 flow. I also tried to use: listView.setSelection (adapter.getCount () - 1); But it does not work.
– Paul
Nov 16 '18 at 7:47
In the meantime I'm trying to think if we can add the following feature: pastebin.com/QiiXtgT2 That when I go up the listview it stops, if I go down she continues. But it seems that it does not work properly or I'm wrong maybe something.
– Paul
Nov 16 '18 at 7:57
In the meantime I'm trying to think if we can add the following feature: pastebin.com/QiiXtgT2 That when I go up the listview it stops, if I go down she continues. But it seems that it does not work properly or I'm wrong maybe something.
– Paul
Nov 16 '18 at 7:57
add a comment |
use the below method to scroll your listview. for example:
scrollMyTableView(activityListview,11,0,getTotalHeightofListView(activityListview),0);
method:
private void scrollMyTableView(View v,final int var, int fromY, int toY, int delay){
ObjectAnimator objectAnimator = ObjectAnimator.ofInt(v, "scrollY", fromY, toY).setDuration(2000);
objectAnimator.setStartDelay(delay);
objectAnimator.start();
objectAnimator.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {}
@Override
public void onAnimationEnd(Animator animation) {
}
@Override
public void onAnimationCancel(Animator animation) {}
@Override
public void onAnimationRepeat(Animator animation) {}
});
}
and if new item added to adapter and need to again go to top of listview and again come back to bottom.you can use below code to do this:
myAdapter.registerDataSetObserver(new DataSetObserver() {
@Override
public void onChanged() {
super.onChanged();
activityListview.setSelection(0);
scrollMyTableView(activityListview,11,0,getTotalHeightofListView(activityListview),0);
}
});
To calculate the height of listview use below method
public int getTotalHeightofListView(ListView listView) {
ListAdapter mAdapter = listView.getAdapter();
int totalHeight = 0;
for (int i = 0; i < mAdapter.getCount(); i++) {
View mView = mAdapter.getView(i, null, listView);
mView.measure(
View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),
View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
totalHeight += mView.getMeasuredHeight();
}
return totalHeight;
}
I tried the code, it does not seem to work properly. I also tried to replace: ListAdapter mAdapter = listView.getAdapter (); Directly with the adapter I use in the listview, nothing changes. In the video, I used the solution with: ListAdapter mAdapter = listView.getAdapter (); scrollMyTableView (listView, 11, 0, getTotalHeightofListView (listView), 10000); ObjectAnimator objectAnimator = ObjectAnimator.ofInt (v, "scrollY", fromY, toY) .setDuration (8000);
– Paul
Nov 16 '18 at 13:04
Video: drive.google.com/file/d/1EKrU_3DeMdpzMR61z1zyPsxaDan0xjpv/view In the first part of the videos you can see, what I'm trying to achieve. The number of elements in the list are 21, [0-20]. As you can see from the video appear only 4 items from 20 to 17. If you pay attention you can see that the scroll in this case drops. As you can see if I click on the elements, all of them appear at the beginning of the element head 20.
– Paul
Nov 16 '18 at 13:05
In the second part of the video the one on Youtube is what I would like to implement as a solution. There are a series of messages, elements of the listview. If I get on top I can see the old messages, if in the meantime are added new messages in the queue nothing happens, because I climbed up to see the old ones. If instead I redeem, then until the last element of the list and in the meantime that I am at the end, are added new messages in the listview the list scrolls. Minute [1.11-1.5] at the end of the video.
– Paul
Nov 16 '18 at 13:05
I have seen the video. The above code can give exactly the solution of your problem. I have already implemented in my project. you need to just change according to your project code.
– kumud kala
Nov 19 '18 at 5:20
It would be possible to see I do not know the video of what you have implemented in your project to understand how you did? Or some portion of code? These are days that I look for solutions, for how to solve these problems.
– Paul
Nov 19 '18 at 20:23
|
show 3 more comments
use the below method to scroll your listview. for example:
scrollMyTableView(activityListview,11,0,getTotalHeightofListView(activityListview),0);
method:
private void scrollMyTableView(View v,final int var, int fromY, int toY, int delay){
ObjectAnimator objectAnimator = ObjectAnimator.ofInt(v, "scrollY", fromY, toY).setDuration(2000);
objectAnimator.setStartDelay(delay);
objectAnimator.start();
objectAnimator.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {}
@Override
public void onAnimationEnd(Animator animation) {
}
@Override
public void onAnimationCancel(Animator animation) {}
@Override
public void onAnimationRepeat(Animator animation) {}
});
}
and if new item added to adapter and need to again go to top of listview and again come back to bottom.you can use below code to do this:
myAdapter.registerDataSetObserver(new DataSetObserver() {
@Override
public void onChanged() {
super.onChanged();
activityListview.setSelection(0);
scrollMyTableView(activityListview,11,0,getTotalHeightofListView(activityListview),0);
}
});
To calculate the height of listview use below method
public int getTotalHeightofListView(ListView listView) {
ListAdapter mAdapter = listView.getAdapter();
int totalHeight = 0;
for (int i = 0; i < mAdapter.getCount(); i++) {
View mView = mAdapter.getView(i, null, listView);
mView.measure(
View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),
View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
totalHeight += mView.getMeasuredHeight();
}
return totalHeight;
}
I tried the code, it does not seem to work properly. I also tried to replace: ListAdapter mAdapter = listView.getAdapter (); Directly with the adapter I use in the listview, nothing changes. In the video, I used the solution with: ListAdapter mAdapter = listView.getAdapter (); scrollMyTableView (listView, 11, 0, getTotalHeightofListView (listView), 10000); ObjectAnimator objectAnimator = ObjectAnimator.ofInt (v, "scrollY", fromY, toY) .setDuration (8000);
– Paul
Nov 16 '18 at 13:04
Video: drive.google.com/file/d/1EKrU_3DeMdpzMR61z1zyPsxaDan0xjpv/view In the first part of the videos you can see, what I'm trying to achieve. The number of elements in the list are 21, [0-20]. As you can see from the video appear only 4 items from 20 to 17. If you pay attention you can see that the scroll in this case drops. As you can see if I click on the elements, all of them appear at the beginning of the element head 20.
– Paul
Nov 16 '18 at 13:05
In the second part of the video the one on Youtube is what I would like to implement as a solution. There are a series of messages, elements of the listview. If I get on top I can see the old messages, if in the meantime are added new messages in the queue nothing happens, because I climbed up to see the old ones. If instead I redeem, then until the last element of the list and in the meantime that I am at the end, are added new messages in the listview the list scrolls. Minute [1.11-1.5] at the end of the video.
– Paul
Nov 16 '18 at 13:05
I have seen the video. The above code can give exactly the solution of your problem. I have already implemented in my project. you need to just change according to your project code.
– kumud kala
Nov 19 '18 at 5:20
It would be possible to see I do not know the video of what you have implemented in your project to understand how you did? Or some portion of code? These are days that I look for solutions, for how to solve these problems.
– Paul
Nov 19 '18 at 20:23
|
show 3 more comments
use the below method to scroll your listview. for example:
scrollMyTableView(activityListview,11,0,getTotalHeightofListView(activityListview),0);
method:
private void scrollMyTableView(View v,final int var, int fromY, int toY, int delay){
ObjectAnimator objectAnimator = ObjectAnimator.ofInt(v, "scrollY", fromY, toY).setDuration(2000);
objectAnimator.setStartDelay(delay);
objectAnimator.start();
objectAnimator.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {}
@Override
public void onAnimationEnd(Animator animation) {
}
@Override
public void onAnimationCancel(Animator animation) {}
@Override
public void onAnimationRepeat(Animator animation) {}
});
}
and if new item added to adapter and need to again go to top of listview and again come back to bottom.you can use below code to do this:
myAdapter.registerDataSetObserver(new DataSetObserver() {
@Override
public void onChanged() {
super.onChanged();
activityListview.setSelection(0);
scrollMyTableView(activityListview,11,0,getTotalHeightofListView(activityListview),0);
}
});
To calculate the height of listview use below method
public int getTotalHeightofListView(ListView listView) {
ListAdapter mAdapter = listView.getAdapter();
int totalHeight = 0;
for (int i = 0; i < mAdapter.getCount(); i++) {
View mView = mAdapter.getView(i, null, listView);
mView.measure(
View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),
View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
totalHeight += mView.getMeasuredHeight();
}
return totalHeight;
}
use the below method to scroll your listview. for example:
scrollMyTableView(activityListview,11,0,getTotalHeightofListView(activityListview),0);
method:
private void scrollMyTableView(View v,final int var, int fromY, int toY, int delay){
ObjectAnimator objectAnimator = ObjectAnimator.ofInt(v, "scrollY", fromY, toY).setDuration(2000);
objectAnimator.setStartDelay(delay);
objectAnimator.start();
objectAnimator.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {}
@Override
public void onAnimationEnd(Animator animation) {
}
@Override
public void onAnimationCancel(Animator animation) {}
@Override
public void onAnimationRepeat(Animator animation) {}
});
}
and if new item added to adapter and need to again go to top of listview and again come back to bottom.you can use below code to do this:
myAdapter.registerDataSetObserver(new DataSetObserver() {
@Override
public void onChanged() {
super.onChanged();
activityListview.setSelection(0);
scrollMyTableView(activityListview,11,0,getTotalHeightofListView(activityListview),0);
}
});
To calculate the height of listview use below method
public int getTotalHeightofListView(ListView listView) {
ListAdapter mAdapter = listView.getAdapter();
int totalHeight = 0;
for (int i = 0; i < mAdapter.getCount(); i++) {
View mView = mAdapter.getView(i, null, listView);
mView.measure(
View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),
View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
totalHeight += mView.getMeasuredHeight();
}
return totalHeight;
}
edited Nov 16 '18 at 12:35
Paul
151210
151210
answered Nov 16 '18 at 8:08
kumud kalakumud kala
416
416
I tried the code, it does not seem to work properly. I also tried to replace: ListAdapter mAdapter = listView.getAdapter (); Directly with the adapter I use in the listview, nothing changes. In the video, I used the solution with: ListAdapter mAdapter = listView.getAdapter (); scrollMyTableView (listView, 11, 0, getTotalHeightofListView (listView), 10000); ObjectAnimator objectAnimator = ObjectAnimator.ofInt (v, "scrollY", fromY, toY) .setDuration (8000);
– Paul
Nov 16 '18 at 13:04
Video: drive.google.com/file/d/1EKrU_3DeMdpzMR61z1zyPsxaDan0xjpv/view In the first part of the videos you can see, what I'm trying to achieve. The number of elements in the list are 21, [0-20]. As you can see from the video appear only 4 items from 20 to 17. If you pay attention you can see that the scroll in this case drops. As you can see if I click on the elements, all of them appear at the beginning of the element head 20.
– Paul
Nov 16 '18 at 13:05
In the second part of the video the one on Youtube is what I would like to implement as a solution. There are a series of messages, elements of the listview. If I get on top I can see the old messages, if in the meantime are added new messages in the queue nothing happens, because I climbed up to see the old ones. If instead I redeem, then until the last element of the list and in the meantime that I am at the end, are added new messages in the listview the list scrolls. Minute [1.11-1.5] at the end of the video.
– Paul
Nov 16 '18 at 13:05
I have seen the video. The above code can give exactly the solution of your problem. I have already implemented in my project. you need to just change according to your project code.
– kumud kala
Nov 19 '18 at 5:20
It would be possible to see I do not know the video of what you have implemented in your project to understand how you did? Or some portion of code? These are days that I look for solutions, for how to solve these problems.
– Paul
Nov 19 '18 at 20:23
|
show 3 more comments
I tried the code, it does not seem to work properly. I also tried to replace: ListAdapter mAdapter = listView.getAdapter (); Directly with the adapter I use in the listview, nothing changes. In the video, I used the solution with: ListAdapter mAdapter = listView.getAdapter (); scrollMyTableView (listView, 11, 0, getTotalHeightofListView (listView), 10000); ObjectAnimator objectAnimator = ObjectAnimator.ofInt (v, "scrollY", fromY, toY) .setDuration (8000);
– Paul
Nov 16 '18 at 13:04
Video: drive.google.com/file/d/1EKrU_3DeMdpzMR61z1zyPsxaDan0xjpv/view In the first part of the videos you can see, what I'm trying to achieve. The number of elements in the list are 21, [0-20]. As you can see from the video appear only 4 items from 20 to 17. If you pay attention you can see that the scroll in this case drops. As you can see if I click on the elements, all of them appear at the beginning of the element head 20.
– Paul
Nov 16 '18 at 13:05
In the second part of the video the one on Youtube is what I would like to implement as a solution. There are a series of messages, elements of the listview. If I get on top I can see the old messages, if in the meantime are added new messages in the queue nothing happens, because I climbed up to see the old ones. If instead I redeem, then until the last element of the list and in the meantime that I am at the end, are added new messages in the listview the list scrolls. Minute [1.11-1.5] at the end of the video.
– Paul
Nov 16 '18 at 13:05
I have seen the video. The above code can give exactly the solution of your problem. I have already implemented in my project. you need to just change according to your project code.
– kumud kala
Nov 19 '18 at 5:20
It would be possible to see I do not know the video of what you have implemented in your project to understand how you did? Or some portion of code? These are days that I look for solutions, for how to solve these problems.
– Paul
Nov 19 '18 at 20:23
I tried the code, it does not seem to work properly. I also tried to replace: ListAdapter mAdapter = listView.getAdapter (); Directly with the adapter I use in the listview, nothing changes. In the video, I used the solution with: ListAdapter mAdapter = listView.getAdapter (); scrollMyTableView (listView, 11, 0, getTotalHeightofListView (listView), 10000); ObjectAnimator objectAnimator = ObjectAnimator.ofInt (v, "scrollY", fromY, toY) .setDuration (8000);
– Paul
Nov 16 '18 at 13:04
I tried the code, it does not seem to work properly. I also tried to replace: ListAdapter mAdapter = listView.getAdapter (); Directly with the adapter I use in the listview, nothing changes. In the video, I used the solution with: ListAdapter mAdapter = listView.getAdapter (); scrollMyTableView (listView, 11, 0, getTotalHeightofListView (listView), 10000); ObjectAnimator objectAnimator = ObjectAnimator.ofInt (v, "scrollY", fromY, toY) .setDuration (8000);
– Paul
Nov 16 '18 at 13:04
Video: drive.google.com/file/d/1EKrU_3DeMdpzMR61z1zyPsxaDan0xjpv/view In the first part of the videos you can see, what I'm trying to achieve. The number of elements in the list are 21, [0-20]. As you can see from the video appear only 4 items from 20 to 17. If you pay attention you can see that the scroll in this case drops. As you can see if I click on the elements, all of them appear at the beginning of the element head 20.
– Paul
Nov 16 '18 at 13:05
Video: drive.google.com/file/d/1EKrU_3DeMdpzMR61z1zyPsxaDan0xjpv/view In the first part of the videos you can see, what I'm trying to achieve. The number of elements in the list are 21, [0-20]. As you can see from the video appear only 4 items from 20 to 17. If you pay attention you can see that the scroll in this case drops. As you can see if I click on the elements, all of them appear at the beginning of the element head 20.
– Paul
Nov 16 '18 at 13:05
In the second part of the video the one on Youtube is what I would like to implement as a solution. There are a series of messages, elements of the listview. If I get on top I can see the old messages, if in the meantime are added new messages in the queue nothing happens, because I climbed up to see the old ones. If instead I redeem, then until the last element of the list and in the meantime that I am at the end, are added new messages in the listview the list scrolls. Minute [1.11-1.5] at the end of the video.
– Paul
Nov 16 '18 at 13:05
In the second part of the video the one on Youtube is what I would like to implement as a solution. There are a series of messages, elements of the listview. If I get on top I can see the old messages, if in the meantime are added new messages in the queue nothing happens, because I climbed up to see the old ones. If instead I redeem, then until the last element of the list and in the meantime that I am at the end, are added new messages in the listview the list scrolls. Minute [1.11-1.5] at the end of the video.
– Paul
Nov 16 '18 at 13:05
I have seen the video. The above code can give exactly the solution of your problem. I have already implemented in my project. you need to just change according to your project code.
– kumud kala
Nov 19 '18 at 5:20
I have seen the video. The above code can give exactly the solution of your problem. I have already implemented in my project. you need to just change according to your project code.
– kumud kala
Nov 19 '18 at 5:20
It would be possible to see I do not know the video of what you have implemented in your project to understand how you did? Or some portion of code? These are days that I look for solutions, for how to solve these problems.
– Paul
Nov 19 '18 at 20:23
It would be possible to see I do not know the video of what you have implemented in your project to understand how you did? Or some portion of code? These are days that I look for solutions, for how to solve these problems.
– Paul
Nov 19 '18 at 20:23
|
show 3 more comments
Use listview smoothScrollToPosition(int position)
function.
Please have a look on this post also
https://www.codota.com/code/java/methods/android.widget.ListView/smoothScrollToPosition
add a comment |
Use listview smoothScrollToPosition(int position)
function.
Please have a look on this post also
https://www.codota.com/code/java/methods/android.widget.ListView/smoothScrollToPosition
add a comment |
Use listview smoothScrollToPosition(int position)
function.
Please have a look on this post also
https://www.codota.com/code/java/methods/android.widget.ListView/smoothScrollToPosition
Use listview smoothScrollToPosition(int position)
function.
Please have a look on this post also
https://www.codota.com/code/java/methods/android.widget.ListView/smoothScrollToPosition
answered Nov 20 '18 at 8:06
ShamsulShamsul
224211
224211
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53332949%2fandroid-java-listview-scroll-automatic-a-slow-time%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
2
Still ListView? Use
RecyclerView
for better performance.– Piyush
Nov 16 '18 at 7:04
add your code and also used listview instand of recyclerview. recyclerview it is latest.
– Android Team
Nov 16 '18 at 7:04