본문 바로가기

Android

(43)
SurfaceView/GLSurfaceView 쩝.. 프로젝트도 진행 중인데, opengl을 좀 봐달라는 부탁이..어째 opengl은 만져볼 일이 전혀 없었다.웬만한건 hollo world는 거쳐보는데, opengl의 hello world 기억은 없다.물론 이쪽의 hello world는 삼각형 일테지만... 아니 큐브던가? 긁적.. 그나마 Direct3D ,Unity3D 만져본게 다행~ 아무튼 단기간에 기본 사항을 살펴보고, 세부 항목을 살펴보기로 해 기본적인것 부터 다시 점검.쩝. 안드로이드는 뷰들이 모여 윈도우로 구성되고, 이 윈도우들은 각각 서피스라는 공간에 표시하게 된다.이러한 서피스들이 모여 서피스 플링거를 통해 프레임버퍼로 합쳐져 화면에 보여지게 된다. 안드로이드 api 단에서 이러한 서피스의 핸들링을 위해 지원되는 클래스가 Surface..
Custom layout, layoutinflater 커스텀 레이아웃과 LayoutInflater 레이아웃은 View을 상속받아 만드는 커스텀뷰와 큰 차이는 없으나, 자식뷰들이 존재하므로 그에대한고려만 추가해 주면 된다.LayoutInflater를 통해 액티비티용으로 구성된 레이아웃을 붙여 다른 뷰그룹에 포함될 수 있는커스텀 레이아웃을 만들수 있다. 커스텀 레이아웃은 ViewGroup을 상속받으며,onMeasure() , onLayout() 메쏘드를 오버라이딩해 구현해 주어야 한다. 뷰와 차이는 없으나 자식뷰에 대한 처리가 추가된다.각 자식뷰를 돌면서 사이즈 정보를 넘겨야 한다. protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { final int count = getChildCo..
MediaStore 썸네일 데이터 관련 정리 >> 오디오오디오의 경우 MediaStore.Audio.Media 에 컨텐츠 정보, MediaStore.Audio.Albums에 썸네일 정보가 저장되어 있다. 앨범별 썸네일을 관리하는 이유는 컨텐츠별 썸네일과의 중복 문제 때문이다. 따라서, MediaStore.Audio.Media 로 컨텐츠 검색 후, MediaStore.Audio.AudioColumns.ALBUM_ID 로 다시 앨범 테이블을 검색해야 원하는 썸네일을 얻을 수 있다. 데이터 취득 절차이미지 uri를 얻어 바로 불러 오는 형태를 사용하나, 일단 기본 적인 순서는 아래와 같다. MediaStore.AudioMeida.EXTERNAL_CONTENT_URI에서 MediaStore.Audio.Media를 쿼리해 미디어 정보를 얻음. 커서얻기con..
뷰의 크기 변경,이동 자식 뷰 추가view.addView( childView, LayoutParams ); 액티비티의 최 상위 윈도우에 윈도우로 뷰 추가하기WindowManager wm =(WindowManager) context.getSystemService( Context.WINDOW_SERVICE ); wm.addView( View ,WindowManager.LayoutParams ); 제거removeView( childView ); 윈도우 뷰wm.removeView( childView ); 뷰의 크기 변경ViewGroup.LayoutParams param = view.getLayoutParams();param.width = 너비;param.height = 높이;view.setLayoutParams(param); 자식 ..
SQLite Database 그동안 db 사용할 일이 없어 그다지 살펴보지 않았는데, 이번에 내부 자료구조를저장해야 할 일이 생겨 급하게 살펴보는 중... SQLiteOpenHelper, SQLiteDatabase데이터는 MediaStore 에서처럼 위 데이터베이스 클래스를 통해 쿼리하고, Cursor를 통해 각 row를전달받게 된다.데이터 베이스에 자료를 넣기 위해서는 ContentValues 에 데이터를 put 해서 insert, update 해주면 된다. >> SQLiteOpenHelperSQLiteOpenHelper를 통해 SQLiteDatabase 객체를 전달받아 db에 쿼리 등 작업이 이루어지게 된다. SQLiteOpenHelper(Context, String, SQLiteDatabase.CursorFactory, int..
MediaStore 오디오 재생목록 >> 중요 필드MediaStore.Audio.Media_ID : 미디어 IDDATA : path MediaStore.Audio.Playlists_ID : 플레이리스트 아이디NAME : 플레이리스트 이름 MediaStore.Audio.Playlists.MembersAUDIO_ID : 미디어 ID >> 재생목록 생성String name = "생성할 리스트 이름"; // Uri uri;// context 의 resolver 얻기ContentResolver resolver = getContentResolver(); // 해당 이름의 플레이 리스트가 있는지 검사Cursor c = resolver.query( MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI,null,MediaS..
ffmpeg 빌드 #3 에구 ffmpeg 관련된 포스팅만 세개째.. cpu별 빌드와 일부 플래그에 관해 정리. (참조는 rockplayer ffmpeg 소스 코드 중 build_android.sh) rockplayer는 Android.mk 를 사용한 ndk-build 가 아닌 해당 툴체인만을 참조해 빌드한다.이는 bambuser 와 비슷한데, cpu와 플래그 설정이 좀더 세밀하게 구분되어 있다. 우선, configure 항목중 스크립트에 언급된 내용에 대해 기술한다. 해당 설정이 플레이어마다 각자 다르므로 이 설정이 정확한 값인지는 확인할 수는 없다 -_-;;;더욱이 ffmpeg도 계속 수정되고 있으니...쩝 일반적인 내용으로 빌드해보고, 아래 관련한 오류가 나면 적용해봐야 할 듯... 기본적으로 설정해야 하는 내용은 비슷하다..
ffmpeg 빌드 #2 ffmpeg 옵션별 빌드 FFMPEG Android.mk ( http://www.cnblogs.com/scottwong/archive/2010/12/17/1909455.html ) config.h 의 define 문자열과 해당 파일을 비교할때 참고할 만 하다. 1: LOCAL_PATH := $(call my-dir) 2: 3: include $(CLEAR_VARS) 4: 5: LOCAL_MODULE := ffmpeg 6: 7: include $(LOCAL_PATH)/config.mak 8: 9: LOCAL_CFLAGS := -DHAVE_AV_CONFIG_H -std=c99 10: 11: AVUTIL_C_FILES = adler32.c \ 12: aes.c \ 13: avstring.c \ 14: base64.c \ 15: crc..