일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- naver open api
- Android
- bottom-up
- 테마변경
- RecyclerView
- 다크모드제한
- recyclerView 클릭이벤트
- RETROFIT
- bronze3
- 프로그래머스
- fragment에서 context사용
- 백준
- toLong()
- Alert Dialog
- gradle설정
- LV1
- dp
- 녹음기
- 임시저장하기
- Kotlin
- silver4
- LIS
- bronze2
- Top-Down
- bronze4
- stack
- map
- 뷰클래스
- silver3
- Silver5
- Today
- Total
목록오늘의 공부는?! (31)
유니 코드

retrofit이란? Retrofit은 서버와 클라이언트 간 http 통신을 위한 라이브러리 즉, 안드로이드에서 http 통신을 할 수 있도록 도와주는 라이브러리이다 자세한 설명을 하기에는 글이 길어질 것 같으니 다음에 따로 글을 올려보도록 하겠다 gradle 추가 implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.retrofit2:converter-gson:2.9.0' retrofit을 사용하기 위해서는 먼저 gradle에 추가를 해줘야한다 (최신버전은 Retrofit GitHub에서 확인) gson형식으로 변환을 해주는 converter-gson 라이브러리도 추가해주었다 네트워크에서 가져온 string..

활용기술 - RecyclerView - View Binding - Retrofit (API 호출) - Glide (이미지 로딩) - Android Room - Open API 어플리케이션 기능 - Naver api를 통해 도서 검색어에 해당하는 책 목록을 가져와서 화면에 그리기 - Local DB를 이용하여 검색 기록 저장 및 삭제 - Local DB를 이용하여 개인 리뷰 저장 open API란? 개발자라면 누구나 사용할 수 있도록 공개된 api로 카카오, 네이버, 구글 등에서 제공한다 원래 인터파크 API를 사용하려고 했지만 2021년 9월 30일부터 서비스가 종료되었기 때문에 Naver에서 제공하는 서비스를 이용했다 https://developers.naver.com/docs/serviceapi/se..

안드로이드에서 화면을 만들어 표시하는 컴포넌트는 액티비티이다. 액티비티가 실행되면서 뷰 클래스를 이용하여 화면을 구성한다. 안드로이드가 제공하는 뷰 클래스는 TextView, ImageView, EditText, Button, Spinner 등이 있다. 그림은 뷰 클래스의 계층 구조이다. View : 모든 뷰 클래스의 최상위 클래스이다. 액티비티는 View의 서브 클래스만 화면에 출력한다. ViewGroup : View의 하위 클래스지만 자체 UI는 없어서 화면에 출력해도 아무것도 나오지 않는다. 다른 뷰 여러개를 묶어서 제어하기 위한 목적으로 사용한다. 일종의 그릇 역할을 하는 클래스로 컨테이너 기능을 담당한다. 뷰의 간격 설정 뷰의 간격은 margin과 padding 속성으로 설정한다. margin ..
커스텀뷰를 정의해서 녹음된 음성을 시각화하였다. 음폭에 따라 drawLine을 이용해 그려준다. 커스텀 뷰에는 Canvas로 무엇을 그릴지 Paint로 어떻게 그릴지 설정해준다. ( custom drawing ) //Paint 생성(음성시각화) private val amplitudePaint = Paint(Paint.ANTI_ALIAS_FLAG).apply { color = context.getColor(R.color.purple_500) strokeWidth = LINE_WIDTH strokeCap = Paint.Cap.ROUND } paint객체를 정의해주고 아래에서 라인을 그려준다. onSizeChanged를 오버라이드 해서 그릴 라인의 사이즈가 변경되는 경우 너비와 높이를 가져와 재설정할 수 있다..
커스텀뷰의 필요성 개발을 할때 애플리케이션의 요구조건에 따라 화면 구성도 조금씩 차이가 발생한다. 안드로이드에서 기본적으로 제공해주는 위젯을 사용하면 편리하지만, 화면을 구성할 적절한 뷰가 없을 때 개발자는 커스텀뷰를 생성하여 사용한다. 커스텀뷰 생성 View 또는 View의 서브클래스(ex: Button) 중 하나를 상속받는 커스텀뷰를 생성한다. 이때, context와 AttributeSet 객체를 매개변수로 취하는 생성자를 제공해야한다! 이 생성자를 사용하면 Layout Editor에서 뷰의 인스턴스를 만들고 수정할 수 있다. class PieChart(context: Context, attrs: AttributeSet) : View(context, attrs) 이 클래스에 필요한 속성 및 이벤트를 ..

MediaRecorder 공식문서 코덱은 인코더와 디코더를 합친 개념 오디오 소스는 용량이 작은 게 아니라 압축할 필요가 있다. 이렇게 압축할 때 사용하는 것이 인코더 포맷은 컨테이너 역할로 압축된 데이터들을 하나의 박스에 차곡차곡 정리해주는 역할 디코더는 이렇게 정리된 데이터들을 꺼내서 재생하는 형태 MediaRecorder recorder = new MediaRecorder(); recorder.setAudioSource(MediaRecorder.AudioSource.MIC); recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); r..

권한 요청?! 공식문서를 살펴보면 녹음을 하기 위해서는 사용자에게 기기의 오디오 입력에 액세스할 것임을 알리는 메시지를 표시해해야한다고 명시되어있다. 이 때 사용하는 권한인 RECORD_AUDIO는 개인정보 보호에 위험을 초래할 수 있기 때문에 dangerous permission으로 간주하고 있다. 안드로이드 6.0이상에서는 위험한 권한을 사용하는 앱은 반드시 앱을 실행하는 도중에 사용자에게 승인을 요청하는 작업을 거쳐야한다. 음성 녹음을 위한 권한 요청 manifest에 아래와 같은 속성을 추가하여 오디오 기능을 사용하겠다고 명시한다. private val requiredPermissions = arrayOf(android.Manifest.permission.RECORD_AUDIO) 요청할 권한을 담..

주요기능 - 마이크를 통해 음성 녹음 - 녹음된 시간 및 재생시간 타임 스탬프 표시 - 녹음한 음성 재생 및 초기화 - 음성 시각화 기술 - Request runtime permissions - CustomView - MediaRecorder - MedioPlayer 상태에 따라 달라지는 버튼 enum class State { BEFORE_RECORDING, ON_RECORDING, AFTER_RECORDING, ON_PLAYING } 녹음 상태에 따라 다른 UI를 보여주어야하기 때문에 현재 녹음 상태를 나타내는 Enum class를 정의한다. 녹음 상태는 녹음전, 녹음중, 녹음후, 재생중 이렇게 4개이다. class RecordButton ( context: Context, attrs: Attribut..

SoundPool 공식문서 오디오 사운드를 재생하고 관리하는 클래스로 오디오 파일을 메모리에 로드한 후 비교적 빠르게 재생할 수 있도록 도와줌 되도록이면 짧은 영상만 재생할 수 있게 제약이 걸려있음 효과음 넣기 private val soundPool = SoundPool.Builder().build() private var tickingSoundId: Int? = null private var bellSoundId: Int? = null soundPool과 사운드Id를 지정해줄 변수 선언한다. private fun initSounds(){ tickingSoundId = soundPool.load(this, R.raw.timer_ticking, 1) bellSoundId = soundPool.load(th..
CountDownTimer 타이머 기능을 구현하기 위해서 CountDownTimer를 사용하였다. 사용자가 seekBar에서 타이머 시간을 설정하고 손을 떼는 순간 타이머가 실행된다. Kotlin object : CountDownTimer(30000, 1000) { override fun onTick(millisUntilFinished: Long) { mTextField.setText("seconds remaining: " + millisUntilFinished / 1000) } override fun onFinish() { mTextField.setText("done!") } }.start() 공식문서의 CountDownTimer이다. 코드를 살펴보면 30초와 1초를 인자로 전달받았고(단위는 밀리세컨드..