본문 바로가기

안드로이드

(80)
[OPENGL ES] FloatBuffer allocation 관리를 통한 그래픽 최적화 앱 메모리 검사를 하면서 쌓이는 ByteBufferAsFloatBuffer, ByteBufferAsShortBuffer 등 때문에 의아해 했었고, 이것들이 OpenGL draw에 필수적인지, 항상 allocation 해주어야 하는지 서치와 실험을 계속했다. 결과적으로 ByteBuffer를 FloatBuffer에 nativeOrder로 간접적으로 할당해주어야 하는 방법은 일반적인데, 이를 한 픽셀을 draw 할 때마다 해 줄 필요는 없는 것이었고, 최초 draw를 시작하는 onSurfaceCreated 에서 한번 수행해주는 것으로 드로잉에 문제가 없음을 확인할 수 있었다. 다만, memory allocation은 한번으로 족하지만 이를 float 배열로 받아 put(values) 하고 position(0)..
[안드로이드] ArrayList에서 contains() 가 객체를 발견하지 못할때, equals를 Overide 하자. 문제는 무엇이였나면 Food 라는 유형의 객체를 담는 ArrayList에 a라는 객체를 추가하고 다시 내용이 같은 a라는 객체를 추가하려할때 방지하고 감지할수 있도록 하려 햇는데 기존 contains() 메소드로는 있는 객체를 항상 감지하지 못하고 똑같은 객체 a를 다시 추가하는 경우가 있어 열심히 뒤졌더니 해결책이 있었다. Food 클래스 내부에 equals(Object object) 를 Override 하여 Food 클래스 안에서 비교하고 싶은 값을 아래처럼 지정해주면 (나같은 경우에는 Food 클래스의 name 값이 같으면 같은 자료라고 보게 했다.) contains() 를 해주어도 조건에 해당하는 객체가 있으면 true 값을 리턴하여준다. @Override public boolean equals(..
[안드로이드] 인텐트로부터 전달받은 String 값을 if 문으로 검출하기 랜덤 음식점 추첨 어플을 만들면서 이전 액티비티에서 선택한 버튼에 따라 인텐트에 내용을 다르게 첨부하고, 이를 다음 액티비티에서 읽는데까지는 성공했는데 이것이 어떤 버튼에서 수행된것인지에 따라 기능을 다르게 하려고 if 문을 통해 전달받은 String을 걸러내려고 하였는데 // 전달받은 인텐트는 intent.putExtra("value", "message") 로 첨부되었다. target = intent.getStringExtra("value"); if ( inputString == target) {} 같은 일반적인 자바 if문으로 전달받은 String 값이 걸러지지가 않는 것이였다. 처음에는 자료구조에 이상이 있을까, 코드 순서에 문제가 있던걸까, 조금의 시간이 걸렸는데 운좋게 올려본 마우스 커서에 메세..
완전 투명버튼 만들기 별것 없다. 처음에는 visibility = "invisible" 로 해결하려 했는데 아예 버튼이 눌리지 않는것을 확인하고 다음으로 찾게 된 방법 android:background="@android:color/transparent" 로 해결 ! 이것이 좋은점은 앱 내에서는 완전 투명이 되어 보이지 않는데, 안드로이드 스튜디오 내에서는 반투명 버튼처럼 보여 적용 중에도 위치 확인 및 수정이 용이하다는 점!
strings.xml 의 내용을 차례대로 참조한다 탈출게임의 대화창을 띄우는것에 당연히 텍스트뷰만큼 할게 없을것인데 배열로 텍스트를 저장할까 싶다가 그냥 처음에 생각했던대로 strings.xml 에 대화들을 저장해 두고, 이를 차례대로 참조하는 법이 어디있을까 하다가 아무 변수나 넣어보면 안드로이드 스튜디오에서 맞는 값을 정해줄 것이다.. 하며 int 값으로 첫번째 string 값을 가져왔는데 된다! 심지어 1씩 증가를 시켜주면은 차례로 값을 읽어오는것이였다.. 좋은 발견이다 strings.xml 의 값들은 이런식으로 되어있고.. int 로 선언한 dialog 변수에 첫 string값인 R.string.dialog_01_01 을 넣어주고 TextView를 클릭할때마다 텍스트 값을 수정하고, 참조할 dialog 값을 1씩 늘려준다. 처음에 뭐 더이상의 s..
[안드로이드] 앱에서 배경음악 재생, 정지하기 오늘은 저번에 생각해둔대로 게임 내 배경음 구현을 마저 했다. 녹음해 온 파일을 생성해둔 raw 폴더 안에 집어넣어 두고 만들어 둔 미디어플레이어 mp에 setLooping() 을 true 로 주고, start() 를 시킨다. 앱 시작과 동시에 반복재생이 시작되는 것이다. 그리고 게임을 틀었다가 게임을 배경으로 보냈을 시에, 혹은 아예 백버튼으로 나갔을때도 생각을 해야 했다. onUserLeaveHint() 는 사용자가 홈버튼을 누를 시에 이를 감지하여 배경음악을 정지시키고, onDestroy()는 앱이 아예 정지되었을시에, 그리고 onBackPressed()는 백버튼을 눌렀을시에 배경음을 정지하도록 만들었다. 모든 메소드들은 super.에 메소드이름을 붙여두어야만 했다. 어쨌든 결과는 매우 잘 된다. ..
[안드로이드] 레이아웃 불러오는데 나오는 오류 해결 (android.view.InflateException) 방탈출 게임을 만드는중에 게임을 시작하면 처음에 나오는 방 화면을 구성해놓았는데 이것이 답답하게 다른 액티비티는 잘만 불러와지는데 Newgame 만 누르면 InflateException 오류와 함께 튕겨버리는 것이였다. 이를 해결하고자 구글링을 하였으나 거의 다 비슷한 내용. 불러오려는 xml파일에 맞게 클래스명이니 파일명이니 수정하는 것이였는데 여기에는 분명 문제가 없어 지웠다가 다시 만들다 그러다가 안되서 오류가 나는 부분을 확인해보니 이미지뷰가 시작되는 부분부터 오류가 있다. 혹시나 해서 주석처리를 하고 다시 실행해보니 아, 실행이 된다. 문제는 이미지뷰에 있던것이다. 이미지뷰 오류라는 내용으로 구글링을 다시 하니 안드로이드에 png가 자주 쓰인다는 내용. 그래서 그제서야 보니 방 화면에 쓰고있던 ..
인트로 화면이 실행되지 않던 문제 해결 인트로화면을 구현하고자 코드를 참고하며 노력을 좀 했는데 인트로화면을 보여주지 않고 메인화면으로 바로 넘어가는 것이였다. 다른분의 코드를 보고 이를 해결하였는데 안드로이드 매니페스트 파일에서 인트로로 줄 액티비티 순서를 맨 첫번째로 둬야하는 것이였다. 현재는 잘 구현되고 있다. 타이틀 바를 없애는것도 해보려 했는데 어째 잘 먹히지가 않아 그냥 NoActionBar 만 테마쪽에 써서 나오는 것들중에 하나로 골랐다. 잘 된다