(AnimatedVectorDrawable) Turn Record Button into StopButton

AnimatedVectorDrawable? AnimatedVectorDrawable 클래스는 VectorDrawable, ObjectAnimator 또는 AnimatorSet과 함께 동작하는 애니메이션 효과 주는 클래스입니다 API25레벨 이전에는  UI 쓰레드에서 동작했던것과는 달리, API 25레벨부터는 RenderThread에서 동작합니다. 그래서 UI 쓰레드에 작업량이 많아도 동작이 매우 부드럽습니다. UI쓰레드가 응답하지 않아도 UI쓰레드가 다음 프레임을 처리할수 있을 때까지 계속 애니메이션을 적용 할 수 있습니다. 따라서 RenderThread 가 활성된 더보기…

글쓴이 Charlezz,

자바 버전 다운그레이드 9->8 for mac only

회사에서 쓰는 아이맥 Android Studio에서 gradlew 커맨드를 쓰려고 하니, java 9.0.x에서는 알아들을수 없는 커맨드라고 나온다… 난 자바를 업데이트한적이 없는데…   왜 인지 모르겠지만 다운그레이드 하기로 맘먹고 자바8을 설치했지만 여전히 9.0.x버전이 건재하다.   그래서 다음 순서대로 셋팅했다.   Step 1: Install Java 8 다운로드: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html Step 2: 자바8을 설치한뒤, 모든 설치된 자바 더보기…

글쓴이 Charlezz,

소프트웨어 아키텍처 패턴 요약

빌더 패턴 제품을 구성하는 구성 요소들을 먼저 결정 하고 이를 조합하는 식으로 객체를 만들수 있다. 객체를 만드는 요소들이 독립적일 때 빌더객체에 살을 붙여나가는식으로 손쉽게 추가하고 확장할 수 있다. 실제제품은 최종적인 빌더 객체로부터 산출할 수 있다. 팩토리 패턴과 유사하나 차이점은, 빌더 패턴은 복잡한 객체의 단계별 생성에 중점을 두고, 팩토리패턴은 제품의 유사군들이 더보기…

글쓴이 Charlezz,

Screen Recorder 만들기

ScreenRecorder 화면 녹화 프로세스 비디오 코덱으로 부터 얻은 Surface를 통해 VirtualDisplay를 생성하였다면, 비디오코덱의 출력버퍼로부터 부호화된 프레임 버퍼를 얻을수 있다. AudioRecord로 부터 얻은 오디오 버퍼(PCM)를  오디오 코덱의 입력버퍼에 넣고 큐에 넣는다면, 출력버퍼로부터 부호화된 오디오 버퍼를 얻을수 있다. MediaMuxer에 비디오와 오디오트랙을 추가하고, start() 한다. muxer.writeSampleData(trackIndex, buffer) 메소드를 통해 먹싱을 한다. 녹화를 중지하고 더보기…

Statusbar 에서의 Notification Icon

노티피케이션 제작 가이드 : https://developer.android.com/guide/topics/ui/notifiers/notifications.html?hl=ko 노티피케이션 아이콘 디자인 가이드 : https://material.io/guidelines/patterns/notifications.html?hl=ko   롤리팝이후 메테리얼 디자인이 도입되면서, 노티피케이션 아이콘은 반드시 흰색이여야 하며 alpha 값 조절을 통해 아이콘의 디자인을 결정해야 한다.   Notification noti = new NotificationCompat.Builder(this, CHANNEL_ID) .setSmallIcon(R.drawable.icon_rounded) .setContentTitle(“제목”) .setContentText(“내용”) .setColor(ContextCompat.getColor(this, R.color.colorAccent)) .build(); nm.notify(1, noti); setSmallIcon()은 노티피케이션의 아이콘을 결정하며, setColor()에 의해 흰색이였던 부분을 더보기…

글쓴이 Charlezz,

디폴트 값과 자바 (@JvmOverloads)

자바에는 디폴트 파라미터 값이라는 개념이 없다. 그러므로 오버로딩한 메소드가 많아지는 경우가 있다.   코틀린에서는 적용된 디폴트파라미터 예제 fun foo(){ param1:Int, param2:String = “” //default 값이 지정된 파라미터 } 위함수를 호출하는경우 foo(123) //디폴트파라미터는 생략가능 foo(123, “test”) // 디폴트값이 있으나 test로 덮어씌움 foo(param2=””, param1= 123) // 파라미터 명을 적는 경우 순서를 바꿀수 더보기…

글쓴이 Charlezz,

RecyclerView를 iOS의 UIPickerView 처럼 fade-in, fade-out 적용하기

롤리팝 출시 이후로 RecyclerView가 도입되고 AdapterView를 커스터마이징 하기가 편해졌다. 오늘은 UIPickerView 스타일로 RecyclerView의 투명도를 주고 싶어서 레이아웃매니저를 다음과 같이 적용했다. class CustomLinearLayoutManager(context: Context) : LinearLayoutManager(context, VERTICAL, false) { private fun updateChildrenAlpha() { for (i in 0 until childCount) { val child: View = getChildAt(i) val bottom: Float = getDecoratedBottom(child).toFloat() val 더보기…

코틀린이란 무엇인가? 왜 필요한가?

코틀린은 자바 플랫폼에서 돌아가는 새로운 프로그래밍 언어이다. 코틀린은 간결하고 실용적이다. 자바코드와의 상호운용성(interoperability)을 중시한다. 코틀린은 기존 자바 라이브러리나 프레임워크와 함께 잘 동작하며, 성능도 자바와 비슷한 수준이다 대상플랫폼은 서버, 안드로이드 등 자바가 실행되는 모든 곳이다. 코틀린의 주목적은 현재 자바가 사용되고 있는 모든 용도에 적합하면서도 더 간결하고 생산적이며 완전한 대체 언어를 제공하는 것이다. 더보기…

글쓴이 Charlezz,

How to solve momory leak of handler

The Lint feature has been enhanced, causing a lint (warning) on handler public class WeakRefHandler extends Handler { private final WeakReference<IHandlerMessage> reference; public WeakRefHandler(IHandlerMessage t) { reference = new WeakReference<IHandlerMessage>(t); } @Override public void handleMessage(Message msg) { super.handleMessage(msg); IHandlerMessage iHandlerMessage = reference.get(); if (iHandlerMessage != null) { iHandlerMessage.handleMessage(msg); } } 더보기…

글쓴이 Charlezz,