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

터치한 채로 이미지 자유자재로 이동하기

0 추천

먼저 제가 작성한 코드 입니다.

- main.java -

package com.example.imagemove2;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;

public class MainActivity extends Activity {
 
 BitmapView bitmapview;
 

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  
        bitmapview = (BitmapView)findViewById(R.id.bitmapview);       
 }

 @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;
 }

}

- BitmapView.java-

package com.example.imagemove2;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.Display;
import android.view.View;
import android.view.WindowManager;

public class BitmapView extends View {
 Bitmap bitmap;
 int width;
 int height;
 int X;
 int sw;
 int c;
 int dx;
 int dy;
 
 @SuppressWarnings("deprecation")

 public BitmapView( Context context, AttributeSet attrs ) {
     super( context, attrs );

     WindowManager wm = (WindowManager)context.getSystemService( Context.WINDOW_SERVICE );
     Display display = wm.getDefaultDisplay();
     sw = display.getWidth();
    
     bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.ball);
     // 얘 뒤져보면 byte[] 에서 bitmap생성하는 것도 있심
     width = bitmap.getWidth();
     height = bitmap.getHeight();
     c = bitmap.getWidth() / 2;
     X = sw / 2; // 초기 X값을 구한다. (가운데)
    }

 @Override
 protected void onDraw(Canvas canvas) {
  canvas.drawBitmap(
     bitmap, // 출력할 bitmap
     new Rect(0,0,width,height),   // 출력할 bitmap의 지정된 영역을 (sub bitmap)
     new Rect(dx,dy,dx+width,dy+height),  // 이 영역에 출력한다. (화면을 벗어나면 clipping됨)
     null);
  super.onDraw(canvas);
 }

 @Override
 public boolean onTouchEvent(MotionEvent event) {
 
  switch(event.getAction()) {
  case MotionEvent.ACTION_DOWN:
   break;
  case MotionEvent.ACTION_UP:
   break;
  case MotionEvent.ACTION_MOVE:
// 주루룩 drag했을 경우 히스토리가 모두 기록되어서 전달됨
   int length=event.getHistorySize();
   float sx, sy, ex, ey;
  
   if (length != 0) {
    sx = event.getHistoricalX(0);
    sy = event.getHistoricalY(0);
    ex = event.getHistoricalX(length-1);
    ey = event.getHistoricalY(length-1);

    dx += (int)(ex-sx);
    dy += (int)(ey-sy);
   }
   invalidate();
   break;
  }
 
  return true;
 }
}

-main.xml-

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" 
    android:orientation="vertical"
    android:gravity="center"
    tools:context=".MainActivity" >

    <com.example.imagemove2.BitmapView
       android:id="@+id/bitmapview"
       android:layout_gravity="center_vertical"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content" />
   
</LinearLayout>

제가 문의 드린점은...

1. 터치시 이미지 자유자재로 드래그 하는건데.. 제가 현재 갤노트를 사용하고 있어 펜을 가지고 이동하면 잘 이동되는데.. 손가락으로 누르고 이동하면 안되네요..ㅡㅡ

2. 처음의 이미지 위치가 가운데에서 시작하고 싶은데.. 디버깅하여 결과를 확인하여 왼쪽 상단에 위치하여 있네요 ㅠㅠ 가운데 위치를 설정했는데도 그러네요 ㅠㅠ xml 부분에 코드를 덜 입력한건지.. 궁금합니다..

3. 마지막으로 java 파일이 두가지인데.. 한 파일에 합칠수는 없는건가요? 많은 질문을 하게 되서 정말 죄송합니다..ㅠㅠ

martin_Mac (370 포인트) 님이 2013년 5월 20일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...