보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

9patch

part2-chapter4-SampleNinePatch

C:\Users\young\AppData\Local\Android\Sdk\tools\



iOS Human Interface Guidelines (HIG)

http://bit.ly/g3TbaY


Android User Interface Guidelines (UIG)

http://bit.ly/hVO32


NFC 태그, 스티커 활용버

http://blog.naver.com/PostView.nhn?blogId=airtry01&logNo=70169815728

https://www.youtube.com/watch?v=3BY6l8xEmNc


push Notification

http://d2.naver.com/helloworld/1119


증강현실

https://www.youtube.com/watch?v=OD8I8PisQD0


API

https://101.livere.co.kr/livere9com/pdf/socialreport_2015_02.pdf



안드로이드 리소스 관리

http://hyeonstorage.tistory.com/152

'모바일앱 > 안드로이드' 카테고리의 다른 글

안드로이드 앱개발 강의노트  (0) 2016.05.09
안드로이드 Tips  (1) 2016.04.05
앱인벤터  (0) 2016.03.26
멀티미디어 실습  (0) 2015.04.15
파일 위치에 따른 미디어 재생 샘플코드  (0) 2015.04.15
WebView 활용  (0) 2015.04.13
블로그 이미지

오픈이지 제로킴

시큐어코딩 교육/컨설팅 전문가 그룹

박상권의 삽집블로그   http://gun0912.tistory.com/55

안드로이드의 다양한 팁을 말로 잘 풀어서 써 놓은 블로그를 찾았습니다. 잊어 먹지 않게 링크들을 모아놨습니다.

 

 

 

[안드로이드]6.0 마시멜로우 권한체크하고 최적화하기

 

[안드로이드 스튜디오]로그캣(logcat) 색깔 바꾸기

 

 

 

[안드로이드/JAVA]클래스(Object) 비어있는지 체크하는 방법

 

[안드로이드]CoordinatorLayout Behavior를 이용해 FooterView 숨기기/보여주기 

'모바일앱 > 안드로이드' 카테고리의 다른 글

안드로이드 앱개발 강의노트  (0) 2016.05.09
안드로이드 Tips  (1) 2016.04.05
앱인벤터  (0) 2016.03.26
멀티미디어 실습  (0) 2015.04.15
파일 위치에 따른 미디어 재생 샘플코드  (0) 2015.04.15
WebView 활용  (0) 2015.04.13
블로그 이미지

오픈이지 제로킴

시큐어코딩 교육/컨설팅 전문가 그룹

[참고자료]


1. 앱인벤터란?

   http://app123.kr/xe/appinv_is


2. 앱인벤터 동영상 강의

  http://app123.kr/xe/appinv_movlesson


3. 앱인벤터 PPT 강의

   http://app123.kr/xe/appinv_lesson


4. 에듀코딩 앱인벤터

   http://www.swedulab.com/appinventor_info

'모바일앱 > 안드로이드' 카테고리의 다른 글

안드로이드 앱개발 강의노트  (0) 2016.05.09
안드로이드 Tips  (1) 2016.04.05
앱인벤터  (0) 2016.03.26
멀티미디어 실습  (0) 2015.04.15
파일 위치에 따른 미디어 재생 샘플코드  (0) 2015.04.15
WebView 활용  (0) 2015.04.13
블로그 이미지

오픈이지 제로킴

시큐어코딩 교육/컨설팅 전문가 그룹


Desktop.zip



AudioTestActivity.java


CameraIntentTestActivity.java


CameraTestActivity.java


MainActivity.java


VideoIntentRecordActivity.java


VideoPlayActivity.java


VideoRecordActivity.java




'모바일앱 > 안드로이드' 카테고리의 다른 글

안드로이드 Tips  (1) 2016.04.05
앱인벤터  (0) 2016.03.26
멀티미디어 실습  (0) 2015.04.15
파일 위치에 따른 미디어 재생 샘플코드  (0) 2015.04.15
WebView 활용  (0) 2015.04.13
[안드로이드] 안드로이드 시작하기  (0) 2014.07.09
블로그 이미지

오픈이지 제로킴

시큐어코딩 교육/컨설팅 전문가 그룹

[오디오 재생]

* 패키지의 assets/audio/oh.mp3 플레이
AssetFileDescriptor afd = getAssets().openFd("audio/oh.mp3");
MediaPlayer  audio_play = new MediaPlayer();
audio_play.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
afd.close();
audio_play.start();
 
* 패키지의 res/raw/oh.mp3 플레이
MediaPlayer  audio_play = MediaPlayer.create(context, R.raw.oh);
audio_play.start();
 
* 파일시스템의 /data/oh.mp3 플레이
MediaPlayer  audio_play = new MediaPlayer();
audio_play.setDataSource("/data/oh.mp3");
audio_play.start();
 

[비디오 재생]

* 파일시스템의 /data/oh.mp4 플레이
VideoView video = (VideoView) findViewById(R.id.video);
MediaController nc = new MediaController(this);
nc.setMediaPlayer(video);
video.setVideoPath("/data/oh.mp4");
video.start();

* 패키지의 res/raw/oh.mp4 플레이

VideoView에서는 패키지의 리소스 파일 재생 불가하며 직접 MediaPlayer를 이용해야함.


'모바일앱 > 안드로이드' 카테고리의 다른 글

앱인벤터  (0) 2016.03.26
멀티미디어 실습  (0) 2015.04.15
파일 위치에 따른 미디어 재생 샘플코드  (0) 2015.04.15
WebView 활용  (0) 2015.04.13
[안드로이드] 안드로이드 시작하기  (0) 2014.07.09
[안드로이드] 지원가능한 미디어 포맷  (0) 2013.08.29
블로그 이미지

오픈이지 제로킴

시큐어코딩 교육/컨설팅 전문가 그룹

출처: http://blog.naver.com/vhahrtkd/90171455819


package kr.or.ddit.exweb;

 

import android.os.Bundle;

import android.app.Activity;

import android.graphics.Bitmap;

import android.util.Log;

import android.view.Menu;

import android.webkit.JsResult;

import android.webkit.WebChromeClient;

import android.webkit.WebSettings;

import android.webkit.WebView;

import android.webkit.WebViewClient;

import android.widget.Toast;

 

public class ExWebActivity extends Activity {

 

 private WebView wv;

 

 @Override

 protected void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);

 

  wv = new WebView(this); // 웹 브라우저 역할을 하는 웹뷰 생성

  setContentView(wv);      // 액티비티 화면(윈도우)에 웹뷰 배치

 

 

  WebSettings ws = wv.getSettings();    //웹뷰의 브라우저 관련 설정을 설정 객체를 통해서

  ws.setJavaScriptEnabled(true);          // 웹뷰 내의 웹문서가 자바스크립트 사용 가능

 

  // alert, confirm, prompt등 브라우저 UI와 관련된 작업을 처리하는 객체 

  //wv.setWebChromeClient(new WebChromeClient());

  wv.setWebChromeClient(new MyWebChromeClient());

 

  //웹뷰 내의 링크 클릭시 페이지 이동 등 컨텐츠 렌더링과 관련된 작업을 처리하는 객체

  //wv.setWebViewClient(new WebViewClient());

  wv.setWebViewClient(new MyWebViewClient());

 

  wv.loadUrl("file:///android_asset/index.html");   // 웹뷰에 웹문서 로드

 

  // wv.addJavascriptInterface(object, name)

  // 웹 뷰 wv 내의 웹 문서의 자바스크립트에서

  // "window.name.메서드명()" 과 같은 형태로

  // Object 의 메서드들을 실행 시킬 수 있게 된다.

 

  // MyInterface 객체의 메서드들을 실행시킬수 있게 된다.

  wv.addJavascriptInterface(new MyInterface(), "java");

 

 }



 // JavaScript Object ---------------------------------------------------------

 class MyInterface{

  private int count =0;

 

  // 자바스크립트로부터 인자를 받을 수도 있고,

  // 결과를 자바스크립트로 리턴(반환) 할 수 있다.

  public String callJava(String str){

   return str + "fromJAVA" + (++count);

  }

 

  public void click(){

   Log.d("DDIT", "Java 코드의 Click 메서드 실행");

  

   // 웹 뷰 내의 현재 웹문서에 존재하는 자바스크립트 함수 실행.

   wv.loadUrl("javascript:changeImg()");

  

  }

 }

 

 // WebViewClient 내부 클래스 -----------------------------------------------------

 class MyWebViewClient extends WebViewClient{

 

  // 이 웹뷰 클라이언트와 연결된 웹뷰가 웹문서 로드를 시작할 때 실행

  @Override

  public void onPageStarted(WebView view, String url, Bitmap favicon) {

   Log.d("DDIT", "onPageStarted : " + url);

   super.onPageStarted(view, url, favicon);

  }

 

  // 이 웹뷰 클라이언트와 연결된 웹뷰가 웹문서 로드가 완료되면 실행

  @Override

  public void onPageFinished(WebView view, String url) {

   Log.d("DDIT", "onPageFinished : " + url);

   super.onPageFinished(view, url);

  }

 

  // 웹 뷰 내에서 링크를 클릭하거나 포워딩으로 페이지 이동이 일어날 때 실행되는 메서드

  @Override

  public boolean shouldOverrideUrlLoading(WebView view, String url) {

   if(url.startsWith("http://m.naver.com")){

    view.loadUrl("http://m.daum.net");

    Toast.makeText(view.getContext(), "No,No,No",

       Toast.LENGTH_SHORT).show();

    return true;

   }else if(url.startsWith("myapp://")) {

    Toast.makeText(view.getContext(),

       url.substring(url.lastIndexOf("/")),

       Toast.LENGTH_SHORT).show();

    return true;

   }

  

   return super.shouldOverrideUrlLoading(view, url);

  }

 

 }

 

 // WebChormeClient 내부 클래스 --------------------------------------------------

 class MyWebChromeClient extends WebChromeClient{

  // 이 웹크롬클라이언트와 연결된 웹뷰 내에서 alert()이 호출되면 실행

  // alert이 호출된 웹뷰와 현재 url, alert에 전달된 메시지 문자열,

  // alert 결과를 설정할 수 있는 JsResult 객체가 인자로 전달된다.

  @Override

  public boolean onJsAlert(WebView view, String url, String message,

    JsResult result) {

   Toast.makeText(view.getContext(), message, Toast.LENGTH_SHORT).show();

   result.confirm(); // alert 창에서 사용자가 확인을 누른 것처럼 조작.

   //return super.onJsAlert(view, url, message, result);

   return true;

  }

 

 

  // 이 웹크롬 클라이언트와 연결된 웹뷰가 웹문서를 로드할 때 현재 몇 퍼센트로

  // 로드되었는지가 인자로 전달되면서 지속적으로 실행.

  @Override

  public void onProgressChanged(WebView view, int newProgress) {

   // 안드로이드에서 sysout logcat으로 출력된다

  System.out.println("onProgressChanged : " + newProgress);

  // 안드로이드에서 sysout 대신  Log.xx 메서드로 디버그 메시지 출력

  // Log.x("태그문자열", "메시지문자열");

  // Log 메서드는 기능은 동일하며

  // 각각 d(debug), e(error), i(information, v(verbose), w(warning)출력용

  Log.d("DDIT","onProgressChanged : " + newProgress);

  

   super.onProgressChanged(view, newProgress);

  }

 

 }

}


--AndroidManifest.xml------------------------------------------------------------

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

    package="kr.or.ddit.exweb"

    android:versionCode="1"

    android:versionName="1.0" >

 

    <uses-sdk

        android:minSdkVersion="8"

        android:targetSdkVersion="17" />

    <uses-permission android:name="android.permission.INTERNET"/>

 

    <application

        android:allowBackup="true"

        android:icon="@drawable/ic_launcher"

        android:label="@string/app_name"

        android:theme="@style/AppTheme" >

        <activity

            android:name="kr.or.ddit.exweb.ExWebActivity"

            android:label="@string/app_name" >

            <intent-filter>

                <action android:name="android.intent.action.MAIN" />

 

                <category android:name="android.intent.category.LAUNCHER" />

            </intent-filter>

        </activity>

    </application>

 

</manifest>

---------------------------------------------------------------------------------

블로그 이미지

오픈이지 제로킴

시큐어코딩 교육/컨설팅 전문가 그룹

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

안드로이드 시작하기

http://klutzy.nanabi.org/android-design-ko/index.html


킷캣 한글설치

http://147.46.109.56:9090/board/board-read.do?boardId=pds&boardNo=138725958058628&command=READ&t=1404864759798


ADT plugin

https://dl-ssl.google.com/android/eclipse/ 



이클립스 다운로드

https://www.eclipse.org/downloads/



과정1: 안드로이드 앱 개발 기본 과정 교육일정 및 내용

 

--------------------------------------------------------------------

1일차:  안드로이드 개요 및 첫번째 앱

--------------------------------------------------------------------

0장 intro & 환경설정 2.0

      http://klutzy.nanabi.org/android-design-ko/)

1장 처음 만드는 안드로이드 애플리케이션 1.0

2장 안드로이드와 모델-뷰-컨트롤러   1.0

3장 액티비티 생명주기 1.0

4장 안드로이드 앱의 디버깅 0.5

5장 두 번째 액티비티 만들기 1.0

7장 UI 프래그먼트와 프래그먼트 매니저 1.5


--------------------------------------------------------------------

2일차 : 모양과 기능을 갖춘 앱을 만들어보자(1)

--------------------------------------------------------------------

8장   레이아웃과 위젯으로 사용자 인터페이스 생성하기

1.0 

9장   ListFragment로 리스트 보여주기 1.5

10장 프래그먼트 인자 사용하기                           1.5

11장 ViewPager 사용하기     1.5

12장 대화상자   1.0

14장 유보 프래그먼트 0.5

16장 액션바 1.0

 

----------------------------------------------------------------------

3일차

---------------------------------------------------------------------- 

17장 로컬파일의 저장과 로딩 1.0

18장 컨텍스트 메뉴와 컨텍스트 액션 모드 1.0

19장 카메라 I: 뷰파인더             1.0

20장 카메라 II: 사진 찍고 이미지 처리하기   1.5

22장 두 패널 마스터 1.0 <-- 앱 완성

20장 브로드캐스트 인텐트 1.0

34장 SQLite 로컬 데이터베이스 1.5





과정2: 안드로이드 앱 개발 심화 과정 교육일정 및 내용


----------------------------------------------------------------------

1일차

---------------------------------------------------------------------- 

26장 HTTP& 백그라운드 태스크 3.0

27장 Looper, Handler, HandlerThread 1.0

28장 검색 2.0

29장 백그라운드 서비스 2.0



----------------------------------------------------------------------

2일차

---------------------------------------------------------------------- 

30장 브로드캐스트와 인텐트 2.0

31장 웹과 웹뷰의 브라우징 2.0

32장 커스텀뷰와 터치 이벤트 2.0

33장 장치의 위치 추적 2.0



----------------------------------------------------------------------

3일차

---------------------------------------------------------------------- 

34장 SQLite 데이터베이스 & 컨텐츠 프로바이더 2.0

35장 비동기 데이터 로더 2.0

36장 구글맵 사용하기 2.0

37장 센서 활용

블로그 이미지

오픈이지 제로킴

시큐어코딩 교육/컨설팅 전문가 그룹

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.


[안드로이드] 지원 가능한 미디어 포맷  Android/Mac/etc 

2010/03/15 17:19

복사http://blog.naver.com/kdr0923/50084725513

전용뷰어 보기

Core Media Formats 테이블은 안드로이드 플랫폼에서 지원되는 미디어 포맷을 정리한 것이다. 어떤 특정한 단말은 이 테이블 이외의 추가적인 포맷을 지원할 수도 있다.

 

TypeFormatEncoderDecoderDetailsFile Type(s) Supported
AudioAAC LC/LTP XMono/Stereo content in any combination of standard bit rates up to 160 kbps and sampling rates from 8 to 48kHz3GPP (.3gp) and MPEG-4 (.mp4, .m4a). No support for raw AAC (.aac)
HE-AACv1 (AAC+) X
HE-AACv2 (enhanced AAC+) X
AMR-NBXX4.75 to 12.2 kbps sampled @ 8kHz3GPP (.3gp)
AMR-WB X9 rates from 6.60 kbit/s to 23.85 kbit/s sampled @ 16kHz3GPP (.3gp)
MP3 XMono/Stereo 8-320Kbps constant (CBR) or variable bit-rate (VBR)MP3 (.mp3)
MIDI XMIDI Type 0 and 1. DLS Version 1 and 2. XMF and Mobile XMF. Support for ringtone formats RTTTL/RTX, OTA, and iMelodyType 0 and 1 (.mid, .xmf, .mxmf). Also RTTTL/RTX (.rtttl, .rtx), OTA (.ota), and iMelody (.imy)
Ogg Vorbis X Ogg (.ogg)
PCM/WAVE X8- and 16-bit linear PCM (rates up to limit of hardware)WAVE (.wav)
ImageJPEGXXBase+progressiveJPEG (.jpg)
GIF X GIF (.gif)
PNG X PNG (.png)
BMP X BMP (.bmp)
VideoH.263XX 3GPP (.3gp) and MPEG-4 (.mp4)
H.264 AVCX 3GPP (.3gp) and MPEG-4 (.mp4)
MPEG-4 SP X 3GPP (.3gp)

블로그 이미지

오픈이지 제로킴

시큐어코딩 교육/컨설팅 전문가 그룹

콜백메서드를 재정의한다.



- 이벤트를 처리할 메서드를 미리 정의해둔다. View는 다음 4가지 콜백 메서드가 정의되어 있다. CustomView 생성시 필요한 메서드를 재정의한다.

onKeyDown(int,KeyEvent)

onKeyUp(int, KeyEvent)

onTrackballEvent(MotionEvent)

onTouchEvent(MotionEvent)


리스너 인터페이스를 구현한다.



- 리스너는 View클래스의 inner interface로 정의되어 있다. 

  리스너 인터페이스를 구현한 클래스를 정의하거나 이벤트를 처리할 액티비티 클래스를 선언할 때 implements 키워드로 해당 인터페이스를 구현하도록 한다.

해당 이벤트를 처리할 뷰에 리스너객체를 연결한다.

     view.setOnXXXXXListener(this) 또는

     view.setOnXXXXXListener(new OnXXXXXListener())



View.OnAttachStateChangeListener.onAttachedToWindow(View)

                                              .onDeattachedromWindow(View)

View.OnClickListener.onClick(View)

View.OnCreateContextMenuListener.onCreateContextMenu(ContextMenu,View,

                                                                                        ContextMenu.ContextMenuInfo)

View.OnDragListener.onDrag(View,DragEvent)

View.OnFocusChangeListener.onFocusChange(View, boolean)

View.OnGenericMotionListener.onGenericMotion(View, MotionEvent)

View.OnHoverListener.onHover(View, MotionEvent)

View.OnKeyListener.onKey(View, int keycode, MotionEvent)

View.OnLayoutChangeListener.onlayoutChange(View, int left, int top, int right, int bottom, 

                                                                       int oldLeft, int oldTop, int oldRight, int oldBottom)

View.OnLongClickListener.onLongClick(View)

View.OnSystemUiVisibilityChangeListener.onSystemUiVisibilityChange(int visibility)

View.OnTouchListener.onTouch(View, MotionEvent)






블로그 이미지

오픈이지 제로킴

시큐어코딩 교육/컨설팅 전문가 그룹

MAT(Memory Analysis Tool) 이란?




[SLIDE_01]





[SLIDE_02]





eclipse plug-in으로 MAT 설치하고 실행하기



[SLIDE_03]




[SLIDE_04]




[SLIDE_05]





분석결과 보기




[SLIDE_06]




[SLIDE_07]




[SLIDE_08]




[SLIDE_09]




[SLIDE_10]




[SLIDE_11]




[SLIDE_12]




[SLIDE_13]




[SLIDE_14]




[SLIDE_15]




[SLIDE_16]





[SLIDE_17]




[SLIDE_18]




[SLIDE_19]




[SLIDE_20]





[SLIDE_21]





HCGellary 앱을 이용한 메모리 누수 모니터링 해보기


안드로이SDK설치폴더/sample 폴더에 가면 "Honey Comb Gellary" 앱을 사용하여 메모리 누수 모니터링 작업을 수행해 본다.

sample프로젝트는 메모리릭이 발생되지 않도록 작성된 프로그램이다. 

우리는 여기서 메모리가 문제가 발생하도록 소스코드를 약간 수정한 뒤 테스트 해보도록 하겠다.

리소스로 부터 읽어온 Bitmap 객체를 ImageView에 붙여서 보여주는 작업을 수행하는데 우리는 이 Bitmap을 HashMap에 캐싱해서 한번 본 이미지에 대한 처리 속도를 높이도록 프로그램을 다음과 같이 수정한다.




[SLIDE_22]




[SLIDE_23]




[SLIDE_24]




[SLIDE_25]



LogCat에는 OOM(Out-of-Memory)에 어느 파일에 몇번째 라인에서 발생했는지에 에러 메시지를 확인할 수 있다. 우리는 좀더 자세한 OOM원인과 상태를 확인하기 위해 해당 프로세스에 대한 메모리 덤프를 확보하고 MAT로 분석 해보려고 한다.




[SLIDE_26]




[SLIDE_27]


Histogram View에 의하면 byte[] 클래스의 Shallow Heap과 Retained Heap이 앱이 사용할 수 있는 Heap 90% 이상을 차지하는 것을 확일 할 수 있다.




[SLIDE_28]

해당 클래스 객체를 참조하는 클래스 객체정보를 확인해 보니 SBitmapCache의 누적된 값이 무척이나 큰것을 확일할 수 있다. 이것은 메모리 누수의 원인으로 판단가능한 데이터이다.




[SLIDE_29]




위 예제의 해결책은?



위 예제의 문제점은 Bitmap 이미지를 캐시하기위해 사이즈제한이 없는 HashMap을 사용하여 캐싱하다 OOM이 발생한 경우이다. 이런 경우에는 LruCache 을 이용하여 이미지 캐시를 하도록 프로그램을 수정할 수 있다.


LruCache은 메모리캐시를 구현하는 API 로 지정된 사이즈만큼 캐시한다. 캐시 사이즈보다 더 많은 데이터를 저장해야 하는 경우 LRU 알고리즘에 따라 가장 최근에 사용하지 않은 데이터를 밀어내고 새로운 데이터를 저장하는 방식을 사용한다.



private static HashMap<String,Bitmap> sBitmapCache = new HashMap<String,Bitmap>();

==> private static LruCache  mMemoryCache; 


LruCache의 사이즈를 앱의 heap메모리 한계의 1/8 정도로 설정하려고 한다면 프래그먼트가 액티비티에 붙을 때 호출되느 onAttach() 메소드를 재정의하여 캐쉬의 사이즈를 설정하도록 한다.


  @Override
   public void onAttach(Activity activity) {

	super.onAttach(activity);
	
       // 앱이 사용할 수 있는 Heap Size 
	final int memClass =((ActivityManager)(activity.getApplicationContext().getSystemService(Context.ACTIVITY_SERVICE))).getMemoryClass();

      // 힙사이즈의 1/8 을 캐시영역으로 할당하기 위해 캐시크기 계산
       cacheSize=1024*1024*memClass/8;
	    
       mMemoryCache=new LruCache(cacheSize);
	   
  }



  
  // 캐시에 저장되어 있지 않으면 Bitmap을 메모리에 캐싱한다.
  public void addBitmapToMemoryCache(String key, Bitmap bitmap) {
    	if (getBitmapFromMemoryCache(key) == null) {
    		mMemoryCache.put(key,bitmap);
    	}
    }
    
    // 해당 키값으로 이미지가 캐시되어 있으면 Bitmap을 찾아서 반환한다.
    public Bitmap getBitmapFromMemoryCache(String key) {
            return (Bitmap)mMemoryCache.get(key);
   	}
  



   void updateContentAndRecycleBitmap(int category, int position) {
        mCategory = category;
        mCurPosition = position;

        if (mCurrentActionMode != null) {
            mCurrentActionMode.finish();
        }

        // 캐시에 키로 사용할 ID를 생성한다.
        String bitmapId=""+category+"."+position;

        // 캐시로 부터 Bitmap 이미지를 찾아온다.
        mBitmap=  getBitmapFromMemoryCache(bitmapId);

        // 캐시된 이미지가 없으면 Resource로 부터 이미지를 읽어서 Bitmap으로 반환하고, 캐시에 저장한다.
        if ( mBitmap == null ) {
               mBitmap = Directory.getCategory(category).getEntry(position)
                                  .getBitmap(getResources());
              addBitmapToMemoryCache(bitmapId, mBitmap);        
        }
        // 읽어온 Bitmap 이미지를 화면에 보여준다.
        ((ImageView) getView().findViewById(R.id.image)).setImageBitmap(mBitmap);
    }





블로그 이미지

오픈이지 제로킴

시큐어코딩 교육/컨설팅 전문가 그룹

티스토리 툴바