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;
		}
	}
}
Posted by 나돌라
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을 실행 하시면 됩니다!


끝! 




Posted by 나돌라
2013. 6. 22. 21:26

다른 곳에서 멀쩡하게 돌아가던 프로젝트를 import를 했는데,

Unable to resolve target 'android-8'

라는 에러와 함께 빨간줄 천지를 본적이 있을 것이다.


이는 이전 프로젝트와의 Build Target이 달라서 일어나는 것.


Project - Properties - Android - BuildTarget

을 설정하면 해결 된다.

 

 

스크린샷 1

 

 

스크린샷 2

 

이렇게 하면 대부분 해결 될 것이다.

 



Posted by 나돌라