2013. 7. 31. 19:38
처음에 직접 하다가 zoom에서 막혔는데,
stackover flow보니까 잘 설명해놓은게 있네요 ㅎㅎ
영어만 있길래 한글로 옮겼습니다.
MainActivity
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(new TouchExampleView(this,null,0)); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } }
TouchExampleView
public class TouchExampleView extends View { private Drawable mIcon; private float mPosX; private float mPosY; private float mLastTouchX; private float mLastTouchY; private static final int INVALID_POINTER_ID = -1; private ScaleGestureDetector mScaleDetector; private float mScaleFactor = 1.f; // The ‘active pointer’ is the one currently moving our object. private int mActivePointerId = INVALID_POINTER_ID; public TouchExampleView(Context context) { this(context, null, 0); } public TouchExampleView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public TouchExampleView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); mIcon = context.getResources().getDrawable(R.drawable.ic_launcher); mIcon.setBounds(0, 0, mIcon.getIntrinsicWidth(), mIcon.getIntrinsicHeight()); mScaleDetector = new ScaleGestureDetector(context, new ScaleListener()); } @Override public void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.save(); canvas.translate(mPosX, mPosY); canvas.scale(mScaleFactor, mScaleFactor); mIcon.draw(canvas); canvas.restore(); } @Override public boolean onTouchEvent(MotionEvent ev) { // Let the ScaleGestureDetector inspect all events. mScaleDetector.onTouchEvent(ev); final int action = ev.getAction(); switch (action & MotionEvent.ACTION_MASK) { case MotionEvent.ACTION_DOWN: { final float x = ev.getX(); final float y = ev.getY(); mLastTouchX = x; mLastTouchY = y; mActivePointerId = ev.getPointerId(0); break; } case MotionEvent.ACTION_MOVE: { final int pointerIndex = ev.findPointerIndex(mActivePointerId); final float x = ev.getX(pointerIndex); final float y = ev.getY(pointerIndex); // Only move if the ScaleGestureDetector isn't processing a gesture. if (!mScaleDetector.isInProgress()) { final float dx = x - mLastTouchX; final float dy = y - mLastTouchY; mPosX += dx; mPosY += dy; invalidate(); } mLastTouchX = x; mLastTouchY = y; break; } case MotionEvent.ACTION_UP: { mActivePointerId = INVALID_POINTER_ID; break; } case MotionEvent.ACTION_CANCEL: { mActivePointerId = INVALID_POINTER_ID; break; } case MotionEvent.ACTION_POINTER_UP: { final int pointerIndex = (ev.getAction() & MotionEvent.ACTION_POINTER_INDEX_MASK) >> MotionEvent.ACTION_POINTER_INDEX_SHIFT; final int pointerId = ev.getPointerId(pointerIndex); if (pointerId == mActivePointerId) { // This was our active pointer going up. Choose a new // active pointer and adjust accordingly. final int newPointerIndex = pointerIndex == 0 ? 1 : 0; mLastTouchX = ev.getX(newPointerIndex); mLastTouchY = ev.getY(newPointerIndex); mActivePointerId = ev.getPointerId(newPointerIndex); } break; } } return true; } private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener { @Override public boolean onScale(ScaleGestureDetector detector) { mScaleFactor *= detector.getScaleFactor(); // Don't let the object get too small or too large. mScaleFactor = Math.max(0.1f, Math.min(mScaleFactor, 5.0f)); invalidate(); return true; } } }
'Programming > Android' 카테고리의 다른 글
[android]Sliding Menu 메뉴 돌려보기(jfeinstein10오픈소스) (8) | 2014.01.20 |
---|---|
TouchEvent 중 Action_Down은 되는데 Action_Move가 안될때 (0) | 2013.07.31 |
Unable to resolve target 'android-8' 에러 났을때 (0) | 2013.06.22 |
알람(Alarm)을 통한 새로운 액티비티(Activity) 열기 (2) | 2012.07.27 |
Eclipse 안드로이드 파일, 핸드폰 단말기에서 실행하기. (0) | 2012.06.25 |
2013. 6. 23. 17:33
항상 Gitbash를 사용하다가 오랜만에 Github에 들어갔더니
환경이 달라져서 당황했던 적이 있었다.
그려려니 하고 설치를 했는데 왠걸? Gitbash가 없어?!!!!
혹시나 저같은 분들을 위해 포스팅 합니다.
일단 Github를 다운 받아야겠죠?
아래 사이트로 갑니다.
https://help.github.com/articles/set-up-git
스크린샷1
초록색 버튼을 누르시고 다운을 받습니다.
이래저래 뭐라는거 다 설치하시고
스크린샷2
바탕화면에 새로 생겼을 아이콘을 클릭 합니다.
스크린샷3
tools - options...
스크린샷4
default shell을 Git Bash로 바꾸고 같이 설치 되있던 Git Shell을 실행 하시면 됩니다!
끝!
2013. 6. 22. 21:26
다른 곳에서 멀쩡하게 돌아가던 프로젝트를 import를 했는데,
Unable to resolve target 'android-8'
라는 에러와 함께 빨간줄 천지를 본적이 있을 것이다.
이는 이전 프로젝트와의 Build Target이 달라서 일어나는 것.
Project - Properties - Android - BuildTarget
을 설정하면 해결 된다.
스크린샷 1
스크린샷 2
이렇게 하면 대부분 해결 될 것이다.
'Programming > Android' 카테고리의 다른 글
[android]Sliding Menu 메뉴 돌려보기(jfeinstein10오픈소스) (8) | 2014.01.20 |
---|---|
TouchEvent 중 Action_Down은 되는데 Action_Move가 안될때 (0) | 2013.07.31 |
CustomVIew(MyView)에서 TouchEvent(Move, Zoom in/out) (0) | 2013.07.31 |
알람(Alarm)을 통한 새로운 액티비티(Activity) 열기 (2) | 2012.07.27 |
Eclipse 안드로이드 파일, 핸드폰 단말기에서 실행하기. (0) | 2012.06.25 |