마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

리스트뷰 스크롤 속도 제어

0 추천

안녕하세요 :) .. 어제 질문하고 오늘도 질문하는.... 죄송합니다 (._ .  )

 

리스트 뷰 자동 스크롤 문제는.. smoothScrollToPosition(mAdapter.getCount()); 로 해결했는데요..

문제는 스크롤 속도가 너무 빠르네요 ㅠㅠㅋㅋ 속도를 늦출 수 있는 방법이 없을까요..?

 

ViewPager에서 사용했던 방법으로 

                    try {
                        Field mScroller = ListView.class.getDeclaredField("mScroller");
                        mScroller.setAccessible(true);
                        FixedSpeedScroller scroller = new FixedSpeedScroller(MainActivity.this);
                        mScroller.set(lv, scroller);
                    } catch (IllegalArgumentException e) {
                        e.printStackTrace();
                    } catch (IllegalAccessException e) {
                        e.printStackTrace();
                    } catch (NoSuchFieldException e) {
                        e.printStackTrace();
                    }

 

이 방법도 써 보았지만.... NoSuchFieldException..?이라고 납니다.. 해당 필드가 없다고 하는데..

(FixedSpeedScroller은 제가 만든 Scroller을 상속받는 클래스입니다..)

 

음... 리스트뷰 스크롤 속도를 제어하는 다른 방법이 있나요?

아니면 위의 코드에서 어떻게 바꿔줘야 할까요? ㅠ

최소 API 는 8로 작업중이에요 [...]

 

구글에 listview scroll speed slowly 하니까.. 죄다 속도가 느리다고 올라오는 글뿐이라..

반대상황인 저로서는 =_=..

 

relz (2,550 포인트) 님이 2014년 8월 14일 질문
http://stackoverflow.com/questions/18697619/auto-scrolling-of-adapterview-listview-gridview

리스트뷰 ScrollBy() 메소드를 사용하는 방법도 찾았습니다 :) ..

2개의 답변

0 추천
 
채택된 답변
listView.smoothScrollBy(distance, duration); 이걸로 속도 조절 되네요
alkyne (22,960 포인트) 님이 2014년 8월 14일 답변
relz님이 2014년 8월 14일 채택됨
:0 ..... 관련 내용 찾아서 열심히 도전중입니다! 감사합니다~ (_ _)
0 추천


                    final Runnable SCROLL_RUNNABLE = new Runnable() {
                        public void run() {
                            if(!isInterrupt){ //Runnable 제어용 boolean 변수
                                final int duration = 100;
                                final int pixelsToMove = 1;
                                lv.smoothScrollBy(pixelsToMove, duration);
                                handler.postDelayed(this, duration);
                                Log.i("TEST", "run!");
                            }
                        }
                    };
                    if(scrollcnt%2 ==0){ //scrollcnt : 실행-중지 식별하기  위한?변수
                        isInterrupt=false;
                        SCROLL_RUNNABLE.run();
                        scrollcnt+=1;
                    }else{
                        Log.i("TEST", "stop..");
                        isInterrupt=true;
                        scrollcnt+=1;
                    }
                        
                    lv.setOnTouchListener(new OnTouchListener() {
                        public boolean onTouch(View v, MotionEvent event) {
                            if(event.getAction()==MotionEvent.ACTION_DOWN){
                                Log.i("TEST", "stop..");
                                isInterrupt=true;
                                scrollcnt+=1;
                            }
                            return false;
                        }
                    });


 

 

이예쓰!! 해결했습니다!! 너무 신나요!! 이틀동안 고민했는데!!!

버튼을 누르면 자동으로 스크롤 시작하고 

다시 버튼을 누르거나 화면(리스트뷰)를 터치하면 자동스크롤이 멈춥니다!

혹시 모르지만 필요하신 분이 계실까 봐 소스를 올려드립니다!! 하하 어차피 다른 곳에 가면 더 좋은 소스가 있겠지만!!

 

도와주신 분들 모두 감사합니다!!! 

 

 

 

Ps. 속도 제어는 pixelsToMove에 적당한 값 줘서 해결했습니다 ^^....

relz (2,550 포인트) 님이 2014년 8월 14일 답변
relz님이 2014년 8월 14일 수정
...