이 블로그 검색

2014년 7월 22일 화요일

이미지 처리.. 사각틀 안에 이미지, 그냥 이미지만 나오게..

이미지 처리...
png 와 jpg ... 의 차이를 모르겠다.


bitmap.compress(CompressFormat.JPG, 100, out);

하니까.. 
원래 동그란 이미지인데
증명 사진 처럼 네모난 사각 틀 안에 동그란 이미지가 들어가고

bitmap.compress(CompressFormat.PNG, 100, out);

하니...
원하는 형태로 사각 틀 없이 동그란 이미지만 나왔다..

무슨 차이일까???

2014년 7월 10일 목요일

Thread Join() 함수

멀티 쓰레드 처리를 해야 될 때 서브 쓰레드에서 처리된 결과 값을 메인 쓰레드가 받아서 처리를 해야 되는 경우가 종종 있다.
 이럴 때 문제가 되는 것은 메인 쓰레드와 서브 쓰레드가 동시에 병렬로 처리가 되기 때문에 서브 쓰레드에서 결과 값을 받기도 전에 메인 쓰레드에서 진행이 되어 원하는 값을 set 하지 못하는 경우가 있다.  (보통 이런 경우 Null 이나 빈값이 많이 들어간다.)

 이 경우 메인 쓰레드를 서브 쓰레드가 연산이 끝날때까지 hold(정지) 시켜 놓아야 되는데, 그럴 때 사용하는 것이 join() 메서드이다.

ex)

mThread.start();   // Thread 시작

Log.d("meme", "  filteredThBoxList => " + filteredThBoxList.size());

try {
   mThread.join();    // join() 을 사용하면 서브 쓰레드가 끝날때까지 메인 쓰레드는 대기한다.
} catch (InterruptedException e) {
   // TODO Auto-generated catch block
e.printStackTrace();
}


return filteredThBoxList;   // filteredThBoxList 이 변수에 mThread에서 처리한 결과 값을 넣고 리턴을 해야 된다.

[Android] 무분별한 Handler 사용 자제

안드로이드 쓰레드 처리에서
UI 처리 아닌 이상에 쓸데 없이 핸들러로 데이터를 넘겨서 처리할 필요 없다.
Main Thread에서 해야 될 UI 처리인 경우만 Handler를 사용한다.

안그러면 Thread.join() 과 같은 쓰레드 관련 메서드들이 무용지물이 된다.


2012년 9월 10일 월요일

(안드로이드) 현재시간 구하기


// 현재 시간을 msec으로 구한다.
long now = System.currentTimeMillis();
// 현재 시간을 저장 한다.
Date date = new Date(now);
// 시간 포맷으로 만든다.
SimpleDateFormat sdfNow = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
String strNow = sdfNow.format(date);
[출처] 현재시간 구하기|작성자 클린이

2012년 7월 4일 수요일

AppWidget 에서 onReceive, onUpdate

AppWidget에서 onReceive()와 onUpdate()가 있는데,
둘을 다 쓰면 onRecive 가 먼저 호출된다.
따라서 onReceive 에 onUpdate 를 호출하는 코드를 넣지 않으면,
onUpdate를 호출할 수 없다. 그러면 onUpdate 에 있는 코드들이 전혀 실행이 안된다..ㅡㅡ;

따라서 브로드캐스팅을 할 필요가 있어서 onReceive 를 사용하게 되면, 반드시
onUpdate를 호출해주어야 한다.



@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
for(int cnt = 0; cnt < appWidgetIds.length; cnt++) {
int appWidgetId = appWidgetIds[cnt];

// String packageNm="com.hanaskcard.android.widgetapp.lgt.hanaskcard";  // 연동할 앱의 팩키지 네임을 넣어준다.
String packageNm="my.test";  // 연동할 앱의 팩키지 네임을 넣어준다.
Log.d("HanaSK", "온 업데이트 실행 ~~~!!!");

            Intent intentCard = context.getPackageManager().getLaunchIntentForPackage(packageNm);  // 타 앱으로 연동.
            PendingIntent pendingIntentCard = PendingIntent.getActivity(context, 0, intentCard, 0);
           
            Intent intentSetting = new Intent(context, SettingMainActivity.class);
            PendingIntent pendingIntentSetting = PendingIntent.getActivity(context, 0, intentSetting, 0);
           
            Intent intentRefresh = new Intent(ACTION_REFRESH);
            PendingIntent pendingIntentRefresh = PendingIntent.getBroadcast(context, appWidgetId, intentRefresh, 0);

            mViews = new RemoteViews(context.getPackageName(), R.layout.hana_m_card_appwidget);
            mViews.setOnClickPendingIntent(R.id.img_maincard, pendingIntentCard);
            mViews.setOnClickPendingIntent(R.id.btn_setting, pendingIntentSetting);
            mViews.setOnClickPendingIntent(R.id.img_refresh, pendingIntentRefresh);
            appWidgetManager.updateAppWidget(appWidgetId, mViews);
           
            refreshWidget();  // 리프레쉬 버튼은 누르지 않았을 때 - 자동 Update 시에도 새 카드 이미지를 가져와야 함.
           
}
super.onUpdate(context, appWidgetManager, appWidgetIds);
}

@Override
public void onReceive(Context context, Intent intent){
String action = intent.getAction();

if (AppWidgetManager.ACTION_APPWIDGET_UPDATE.equals(action)) {
    Bundle extras = intent.getExtras();
    if (extras != null) {
        int[] appWidgetIds = extras.getIntArray(AppWidgetManager.EXTRA_APPWIDGET_IDS);
        if (appWidgetIds != null && appWidgetIds.length > 0) {
            this.onUpdate(context, AppWidgetManager.getInstance(context), appWidgetIds);
        }
    }
}

if(action.equals(HanaMCardWidgetProvider.ACTION_REFRESH)){
refreshWidget();
}

}

public void refreshWidget(){
Log.d( TAG, "Widget Refresh" );
// AID를 새로 가져와 - getMainCardNumber(),  카드 이미지를 셋팅- setMainCardImg()하는 로직을 넣음.
  //  mViews.setImageViewResource(R.id.imageView1, mainCardImg);
}

2012년 7월 1일 일요일

이클립스 상속받은 메서드나 변수 확인할 때

어떤 클래스를 상속 받았을 때 그 부모의 속성(메서드나 변수) 등을 확인해야 할 때가 있다.

이때는

해당 클래스 선택 후,

ALT + SHIFT + S (여기까지가 우클릭, source 에 해당된다.) ==> V