1 minute read


1. MainActivity.kt

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import android.os.Bundle;
import android.widget.ImageView;
import androidx.appcompat.app.AppCompatActivity;
import android.view.ScaleGestureDetector;

class MainActivity : AppCompatActivity() {
  // 제스처 이벤트 감지하는 변수
  private var mScaleGestureDetector: ScaleGestureDetector? = null
  private var scaleFactor = 1.0f
  private lateinit var mImageView: ImageView

  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    mImageView= findViewById(R.id.imageView);

    mScaleGestureDetector = ScaleGestureDetector(this, ScaleListener())
  }
}



2. 이미지 확대/축소

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// 제스처 이벤트가 발생하면 실행되는 메소드
override fun onTouchEvent(motionEvent: MotionEvent?): Boolean {
  // 제스처 이벤트를 처리하는 메소드를 호출
  mScaleGestureDetector!!.onTouchEvent(motionEvent)
  return true
}

// 제스처 이벤트를 처리하는 클래스
inner class ScaleListener : ScaleGestureDetector.SimpleOnScaleGestureListener() {
  override fun onScale(scaleGestureDetector: ScaleGestureDetector): Boolean {
    scaleFactor *= scaleGestureDetector.scaleFactor

    // 최소 0.5, 최대 2배
    scaleFactor = Math.max(0.5f, Math.min(scaleFactor, 2.0f))

    // 이미지에 적용
    mImageView.scaleX = scaleFactor
    mImageView.scaleY = scaleFactor
    return true
  }
}



3. 전체 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import android.view.MotionEvent;
import android.os.Bundle;
import android.widget.ImageView;
import androidx.appcompat.app.AppCompatActivity;
import android.view.ScaleGestureDetector;

class MainActivity : AppCompatActivity() {
  // 제스처 이벤트 감지하는 변수
  private var mScaleGestureDetector: ScaleGestureDetector? = null
  private var scaleFactor = 1.0f
  private lateinit var mImageView: ImageView

  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    mImageView= findViewById(R.id.imageView);

    mScaleGestureDetector = ScaleGestureDetector(this, ScaleListener())
  }

  // 제스처 이벤트가 발생하면 실행되는 메소드
  override fun onTouchEvent(motionEvent: MotionEvent?): Boolean {
    // 제스처 이벤트를 처리하는 메소드를 호출
    mScaleGestureDetector!!.onTouchEvent(motionEvent)
    return true
  }

  // 제스처 이벤트를 처리하는 클래스
  inner class ScaleListener : ScaleGestureDetector.SimpleOnScaleGestureListener() {
    override fun onScale(scaleGestureDetector: ScaleGestureDetector): Boolean {
      scaleFactor *= scaleGestureDetector.scaleFactor

      // 최소 0.5, 최대 2배
      scaleFactor = Math.max(0.5f, Math.min(scaleFactor, 2.0f))

      // 이미지에 적용
      mImageView.scaleX = scaleFactor
      mImageView.scaleY = scaleFactor
      return true
    }
  }
}