Notice
Recent Posts
Recent Comments
올해는 머신러닝이다.
무조건 한장씩 스크롤되는 gallery 본문
출처 : http://devlog.thoth.kr/?mid=blog&document_srl=6248231
android.widget.Gallery는 드래그하는 속도에 따라서 스크롤되는 길이가 달라진다.
Gallery가 제공하는 속성이나 메소드로는 드래그속도에 관계없이 하나의 View만 스크롤되도록 설정할 수 없다.
Touch Event Callback 메소드나 ImageSwitcher, 애니메이션 등을 이용하여 비슷한 이펙트를 구현하는 등 방법은 여러 가지가 있겠지만
코드가 복잡해 지고 Gallery가 제공하는 기능을 포기하거나 구현해주어야 한다.
하지만, onFling메소드를 오버라이드하여 드래그속도에 따른 스크롤기능 대신 하나의 View만 스크롤되도록 fling 기능만을 수정할 수 있다.
- public class GalleryForOneFling extends Gallery {
- public GalleryForOneFling(Context context, AttributeSet attrs) {
- super(context, attrs);
- }
- @Override
- public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
- int keyCode;
- if(e2.getX() > e1.getX()){
- keyCode = KeyEvent.KEYCODE_DPAD_LEFT;
- }
- else{
- keyCode = KeyEvent.KEYCODE_DPAD_RIGHT;
- }
- onKeyDown(keyCode, null);
- return true;
- }
- }
Gallery에는 키코드로 좌측, 우측, 클릭에 대한 핸들링을 할 수 있도록 onKeyDown메소드가 마련되어 있다.
public boolean onKeyDown (int keyCode, KeyEvent event)
Since: API Level 1Handles left, right, and clicking
Parameters
keyCode A key code that represents the button pressed, from KeyEvent
.event The KeyEvent object that defines the button action. Returns
- If you handled the event, return true. If you want to allow the event to be handled by the next receiver, return false.
See Also
onKeyDown(int, KeyEvent)
또한, 키코드 대신 다음과 같이 AdapterView와 AbsSpinner에서 제공하는 메소드들을 이용할 수도 있다
- @Override
- public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
- int position = getSelectedItemPosition();
- if(e2.getX() > e1.getX()){
- if(position > 0) setSelection(position - 1, true);
- }
- else{
- if(position < getCount()) setSelection(position + 1, true);
- }
- return true;
- }
'Android > Tip&Tech' 카테고리의 다른 글
android google map api 참고문서 (0) | 2011.05.17 |
---|---|
android gallery left,reight move tip (0) | 2011.05.17 |
android tip (0) | 2011.05.16 |
canvas를 bitmap , png 저장 (0) | 2011.05.16 |
view 를 bitmap으로 저장 (0) | 2011.05.16 |