최근 갤럭시 노트 10으로 기기를 바꿨는데, 다양한 진동 유형과 강도 설정이 가능했다. 이걸 응용해 마사지 어플로 만들어 보면 재미있을 거란 생각이 들어 만들어 보았다. 안드로이드 개발자 사이트와 티스토리 IT 블로그를 참조했다.
마사지 화면 디자인
토글 기능을 넣어서 버튼 하나만 만들었다. 추후에 진동 종류 선택이나 진동과 함께 나오는 뮤직 등을 선택할 수 있는 버튼을 추가해 확장해 나가면 좋을 듯하다
안드로이드 VIBRATE 사용 권한 추가
AndroidManifest.xml에 아래 코드를 추가해 권한을 설정한다.
<uses-permission android:name="android.permission.VIBRATE"/>
마사지 진동 컨트롤 코드 작성
모바일 진동요청 처리는 아래 순서로 처리한다. 코틀린 코드로 작성했다.
- 시스템에서 Vibrator 서비스를 받아온다.
- 진동 유형, 진폭, 반복 여부를 설정한다.
- 진동 상태를 화면에 출력한다.
진동 유형은 진동 지속 시간인데, 해당 배열에 원하는 대로 추가하면 다양하게 만들 수 있다. 진폭도 이에 맞춰 동일한 크기 배열을 만들어 강도를 설정한다.
[MainActivity.kt]
lateinit var vibrator : Vibrator
@RequiresApi(Build.VERSION_CODES.O)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
vibrator = getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
val aTimings = longArrayOf(0,1000,1000,500,500)
val aAmplitudes = intArrayOf(0,50,0,100,0)
// 진동 효과 (진동유형(시간), 진동세기, 반복(0:무한반복, -1:한번)
val vibrationEffect = VibrationEffect.createWaveform(aTimings, aAmplitudes,0)
btnVibratorStart.setOnClickListener {
var vibratorStatus : String = ""
if (it.tag == 1) {
vibrator?.cancel() // 진동 끄기
it.tag = 0
btnVibratorStart.text = "진동 켜기"
tvComment.text = "진동을 끕니다."
}
else {
vibrator?.vibrate(vibrationEffect) // 진동 켜기
it.tag = 1
btnVibratorStart.text = "진동 꺼기"
tvComment.text = "진동이 느껴지세요?"
}
}
}
VibrationEffect.createWaveform()은 3개의 인자를 가진다.
- timings : 진동 울리는 시간
- amplitudes : 진폭 (0~255)
- repeat : 0이면 무한 반복, -1이면 1번만 수행한다.
public static VibrationEffect createWaveform(long[] timings, int[] amplitudes, int repeat) {
VibrationEffect effect = new Waveform(timings, amplitudes, repeat);
effect.validate();
return effect;
}
Next Step
UI 디자인이 많이 허접하다. 주로 C로 업무용 프로그램 개발해서 UI 디자인이 너무 생소하고 어렵다. 다음에는 사용자 편리성과 UI 디자인을 가미하여 구글 플레이 스토어에 등록하는 과정을 포스팅해 보려 한다.
* 모바일 앱 디자인에 대한 가이드나 유용한 어플이 있으면 답글로 알려 주세요.
반응형
'코드리뷰 > 코틀린 리뷰' 카테고리의 다른 글
로또 931회 당첨결과 및 932회 당첨번호 예상! (안드로이드 로또 앱) (0) | 2020.10.04 |
---|---|
로또 931회 당첨번호 예상! (안드로이드 로또 앱) (1) | 2020.09.30 |
안드로이드 코틀린 프래그먼트 만들기 (0) | 2020.09.19 |
댓글