반응형
package com.teamnote.Management.Listener; import android.content.Context; import android.view.MotionEvent; import android.view.View; import android.view.animation.AnimationUtils; import android.widget.ViewFlipper; import com.teamnote.DiaryActivity; import com.teamnote.R; /** * ViewFlipper TouchListener 클래스 * * @author DervelJunHome * */ interface ACTIVITY_CODE { static final int ACTIVITY_CALENDAR = 0; static final int ACTIVITY_WEEK = 1; static final int ACTIVITY_DAY = 2; } public class ViewFlipperTouchListener implements View.OnTouchListener { private int m_nPreTouchPosX = 0; // 현재 액티비티의 위치 private int nActivityIs = ACTIVITY_CODE.ACTIVITY_CALENDAR; private boolean mainIs = true; private Context nContext; private ViewFlipper nViewFlipper; public ViewFlipperTouchListener(Context pContext, ViewFlipper pViewF) { this.nContext = pContext; this.nViewFlipper = pViewF; } private void MoveNextView() { nViewFlipper.setInAnimation(AnimationUtils.loadAnimation(nContext, R.anim.appear_from_right)); nViewFlipper.setOutAnimation(AnimationUtils.loadAnimation(nContext, R.anim.disappear_to_left)); nViewFlipper.showNext(); } private void MovewPreviousView() { nViewFlipper.setInAnimation(AnimationUtils.loadAnimation(nContext, R.anim.appear_from_left)); nViewFlipper.setOutAnimation(AnimationUtils.loadAnimation(nContext, R.anim.disappear_to_right)); nViewFlipper.showPrevious(); } public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { m_nPreTouchPosX = (int) event.getX(); } if (event.getAction() == MotionEvent.ACTION_UP) { int nTouchPosX = (int) event.getX(); if (nContext.getClass().equals(DiaryActivity.class)) { if (nTouchPosX < m_nPreTouchPosX) { if (mainIs) { MoveNextView(); mainIs = false; } } else if (nTouchPosX > m_nPreTouchPosX) { if (!mainIs) { MovewPreviousView(); mainIs = true; } } } else { if (nTouchPosX < m_nPreTouchPosX) { if (nActivityIs == ACTIVITY_CODE.ACTIVITY_CALENDAR) { MoveNextView(); nActivityIs = ACTIVITY_CODE.ACTIVITY_WEEK; } else if (nActivityIs == ACTIVITY_CODE.ACTIVITY_WEEK) { MoveNextView(); nActivityIs = ACTIVITY_CODE.ACTIVITY_DAY; } } else if (nTouchPosX > m_nPreTouchPosX) { if (nActivityIs == ACTIVITY_CODE.ACTIVITY_DAY) { MovewPreviousView(); nActivityIs = ACTIVITY_CODE.ACTIVITY_WEEK; } else if (nActivityIs == ACTIVITY_CODE.ACTIVITY_WEEK) { MovewPreviousView(); nActivityIs = ACTIVITY_CODE.ACTIVITY_CALENDAR; } } } m_nPreTouchPosX = nTouchPosX; } return true; } };
위에 코드는 뷰 플립퍼의 끝과 끝을 정의한 것.
소스에서는 interface로 정의한 상수 부분이 빠져있다. interface를 활용한 상수 부분을 참고.
뷰 플리퍼의 레이아웃은 <include>를 레이아웃 xml에 정의하여 사용하고
각 액티비티의 LinearLayout은 id를 부여하여 다음과 같이 버튼을 만든다.
LinearLayout linear = new LinearLayout(); Button btnTest = (Button) linear.findViewById(R.id.testButton);
context를 받아와서는 getClass()를 한 뒤 equal 비교
반응형
'Android' 카테고리의 다른 글
ExpandableListViewAdapter (0) | 2013.05.16 |
---|---|
interface를 상수처럼 사용하기 (0) | 2013.05.09 |
레이아웃 둥근 모서리 (0) | 2013.05.05 |
StartActivityForResult 결과를 받을 수 있는 인텐트 실행 법 (0) | 2013.05.04 |
인트로 Intro 화면 만들기 (0) | 2013.05.04 |
WRITTEN BY
,