반응형

웹 경로의 동영상을 VideoView나 MediaPlayer를 사용하여 보여 줄 경우 대기 화면이 검은색으로 나오게 됩니다.

 

이러한 경우엔 Thumbnail 이미지를 직접 가져와 사용하게 되면 Local 동영상처럼 미리 보기 화면을 구성할 수 있습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public static Bitmap getWebVideoThumbnail(Context context, Uri uri) {
    MediaMetadataRetriever retriever = new MediaMetadataRetriever();
    try {
        retriever.setDataSource(uri.toString(), new HashMap<StringString>());
        return retriever.getFrameAtTime(1000, MediaMetadataRetriever.OPTION_CLOSEST);
    } catch (IllegalArgumentException e) {
        // TODO: handle exception
        e.printStackTrace();
    } catch (RuntimeException e) {
        // TODO: handle exception
        e.printStackTrace();
    } finally {
        try {
            retriever.release();
        } catch (RuntimeException e) {
            // TODO: handle exception
            e.printStackTrace();
        }
    }
    return null;
}
cs

 

해당 함수를 동기/비동기 방식으로 사용하시면 됩니다.

반응형
반응형

셋팅해야 되는 이미지의 사이즈가 일정하지 않을 경우 변경될 Width의 비율에 맞춰 Height를 수정하면 원본 비율에 맞는 이미지로 변경할 수 있습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public static Bitmap setRatioImage(Context context, ImageView view, Bitmap src, int imageId) {
    Bitmap bitmap;
    try {
        int viewWidth = view.getWidth();
        int srcWidth = src.getWidth();
       
        float ratio = (float)viewWidth / (float)srcWidth;
       
        float height = src.getHeight() * ratio;
        bitmap = Bitmap.createScaledBitmap(src, (int)viewWidth, (int)height, false);
    } catch (Exception e) {
        // TODO: handle exception
        bitmap = BitmapFactory.decodeResource(context.getResources(), imageId);
    }
    return bitmap;
}
cs

 

반응형
반응형

개발 시에 Auto Media Scanning 때문에 내가 생성한 폴더 내의 미디어 파일들이 갤러리나 포토 앱에 노출되는 경우 

 

해당 파일들이 포함된 폴더 내에 임의로 .nomedia 파일을 생성하게 되면 해당 폴더에 미디어 파일들이 Auto Media Scanning에서 제외 됩니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
public static boolean createNoMediaFile(Context context, String path) {
    File file = new File(path + ".nomedia");
    if(!file.exists()) {
        try {
            file.createNewFile();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    return false;
}
cs

 

반응형
반응형

아이콘을 드래그 하고 드롭하는 예제가 많기는 하지만 대부분 리버스 기능이 없는 말 그대로 '드래그'의 기능만 구현된 예제만

 

 

 

있어서 흔히 게임에 많이 쓰이는 스킬 장착 인터페이스를 만들어 봤습니다.

 

 

 

 

 

 

 

 

위의 사진 처럼 아이템을 끌어다가 장착하는 형식입니다.

 

 

 

 

 

 

가운데 나열된 스킬들을 아래 칸의 빈 슬롯에 장착하는 형식입니다.

 

  

 

    

 

 

 

위와 같이 원하는 스킬을 선택하여 원하는 빈칸에 장착 할 수 있습니다.

 

 

 

    

 

 

 

또한 장착된 스킬을 다시 드래그 하면 장착이 해제 됩니다.

 

 

 

동적 레이아웃 생성은 입맛에 맞춰 바꾸기가 힘듭니다. 하지만 위의 소스는 100% Layout의 Touch를 활용한 위치 변경으로

 

 

 

소스가 아주 간단하며 직관적인 코드 변경이 가능합니다.

 

 

 

 

 

IconDnDGame.apk
다운로드

 

 

 

반응형
반응형

제가 의도 한건 폰 마이크에 소리가 들어가면 바 형태로 소리의 양만큼 오르락 내리락 하는것이였습니다.

 

 

 

이게 대체 이름이 뭔가요 ㅋㅋ 구글에서 찾기도 힘드네요

 

 

 

따라서 참고 이미지 또한 없습니다 ㅠ_ㅠ

 

 

 

참고 할만한 안드로이드 내용또한 없네요 그냥 만들어 봅시다

 

 

 

 

  

 

 

 

일단 실시간으로 마이크에 소리를 내면 오르락 내리락 합니다. 구간은 총 7개이고 Min ~ Max 수치를 제 임의로 설정해서

 

 

 

그럴싸 하게 만들었습니다.

 

 

 

밤중에 혼자 훅! 훅! 야! 야! 하고 있습니다.

 

 

 

MicDisplay.apk
다운로드

 

 

 

반응형
반응형

 리소스의 애니매이션 처리는 많이들 하기 때문에 제외 하겠습니다.

 

 

 

이번엔 Activity의 전환에 따른 애니매이션처리를 알아볼껀데요. 처리 방법은 동일 하지만 리소스의 애니매이션과 그 사용 법이

 

 

 

다르기 때문에 자세히 한번 알아봅시다.

 

 

 

우선 일반적인 리소스의 애니매이션 처리는 http://blog.daum.net/hopefullife/98  다음 사이트를 참고 하시고

 

 

 

엘리먼트의 속성을 자세히 알아보시려면 http://underclub.tistory.com/351 다음 사이트를 참고 하시면 됩니다.

 

 

 

그럼 저는 위의 사이트들을 참고 하여 팝업 Activity를 만들어 보겠습니다.

 

 

 

AnimationActivity.java

 

 

 

###java


package com.activity.anim;
import android.R.style;
import android.app.Activity;
import android.content.res.Resources;
import android.os.Bundle;

public class AnimationActivity extends Activity{
    /** Called when the activity is first created. */
 
 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
       
        setContentView(R.layout.anim);

   }
 protected void onApplyThemeResource(Resources.Theme theme, int resid, boolean first) {

    super.onApplyThemeResource(theme, resid, first);
       
        // no background panel is shown
       theme.applyStyle(style.Theme_Panel, true);
     
    }
 
}

 

 

 

AndroidManifest.xml

 

###xml


<activity android:name=".AnimationActivity"
          android:theme="@android:style/Theme.Dialog"
          android:label="@string/app_name">
</activity>

 

 

 

일단 팝업 Activity 준비는 끝이 났네요. 그럼 이 Activity에 애니매이션을 적용 시켜 봅시다

 

 

 

 

 

 

Intent를 불러내고 incoming animation 과 outgoing animation을 지정해 주시면됩니다.

 

 

 

###java


Intent i = new Intent(ActivityAnimationActivity.this, AnimationActivity.class);
startActivity(i);
overridePendingTransition(R.anim.fade_in, R.anim.fade_in);

 

 

 

본 소스에는 7가지 애니메이션이 첨부 되어있습니다.

 

 

 

 

 

 

ActivityAnimation.zip
다운로드

 

 

 

반응형
반응형

일단 위젯에 적용시키기 전에 Flash 컨트롤에 대해 알아보겠습니다.

 

 

 

 

 

http://developer.android.com/reference/android/hardware/Camera.Parameters.html

 

 

 

 

 

개발자 사이트의 Reference를 살펴보면 Falsh Mode의 Summary는 다음과 같습니다.

 

 

 

 

 

 

총 5가지지만 실제 Device에 적용시킬 수 있는 MODE는 한정되있다는것을 일단 인식하시고

 

 

 

각 Summary에 대해 알아보면

 

 

 

 

 

 

위의 Summary중에 중요한것은 바로 FLASH_MODE_ON 과 FLASH_MODE_TORCH 입니다.

 

 

 

이 둘의 차이점은 상당히 모호 한데요 써치를 해보면 FLASH_MODE_TORCH로 해야 Flash가 나온다는 글도 있고

 

 

 

FLASH_MODE_ON으로 해야 Flash가 나온다는 글도 있습니다.

 

 

 

depending on the driver의 영향이 의외로 큰가 봅니다. 따라서 각 Device마다 맞는 On/Off Mode가 존재 하는거 같군요.

 

 

 

본론으로 들어가서 LED FLASH MODE를 사용하는 순서는

 

 

 

Camera camera = Camera.open();  카메라를 활성화 하고

 

 

 

Camera.Parameters Parameters = camera.getParameters();  카메라의 파라미터를 가져와

 

 

 

Parameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH); 원하는 MODE를 SET 해주면 됩니다.

 

 

 

잊지 말아야 할 것은 Camera 사용법 과 동일하게 종료후 release()를 하셔야 된다는 점입니다.

 

 

 

또 다른점은 Preview를 생성 하지 않아도 Flash 컨트롤은 가능 하다라는 점입니다.

 

 

 

그럼 각 Device에서 지원하는 Flash Mode를 어떻게 확인하는가? 라는 의문이 생기실 수 있겠네요

 

 

 

바로 Parameters.getSupportedFlashModes() 를 사용하여 Log를 찍어보시면 해당 Device에서 지원하는 모드의

 

 

 

Constant Value 를 확인 하실 수 있습니다.

 

 

 

 

Flash가 없는 Galaxy S의 경우 [ null ]

 

 

 

 

 

 

Flash가 있는 베가LTE EX, 미라크의 경우 [ off, auto, on, torch ]

 

  

 

위처럼 각 Device마다 지원하는 Flash의 Mode가 다르다는것을 확인 할 수 있습니다.

 

 

 

 

 

FlashTest.zip
다운로드

 

 

 

반응형
반응형

간혹 사용 단말기의 정보가 필요할때가 있는데 물론 이것의 수집은 불법입니다.

 

 

 

하지만 사용자의 편의에 맞출려면 수집은 하지 않더라도 사용자 폰의 제조사의 라이브러리에 맞출 필요가 있습니다.

 

 

 

이때 사용해볼만한 것이 바로

 

 

 

http://developer.android.com/reference/android/os/Build.html 

 

 

 

http://developer.android.com/reference/android/telephony/TelephonyManager.html

 

 

 

위의 두가지 입니다.

 

 

 

 

 

 

대부분의 원하는 단말기 정보를 얻어 낼 수 있습니다.

 

 

 

 

 

InfomationActivity.zip
다운로드

 

 

 

반응형
반응형

손전등 어플은 최신 핸드폰(LED 플레시가 있는)에 기본 내장되는 기본적으로 제공하는 어플중에 하나입니다.

 

하드웨어 컨트롤 + 위젯 구성 + 이벤트 처리 등을 배우기 가장 좋은 예가 될수 있겠네요

 

우선 오늘은 플레시 실행에 앞서 토글 형태의 위젯을 만들어 보도록 하겠습니다. 기본적인 On/Off 기능의 토글만

 

원하는 것이므로 간단하면 간단할 수록 좋겠습니다.

 

제가 먼저 생각한것은 스위치(상하)형태의 위젯 아이콘이였는데요. 바로바로

 

 

 

                          

 

                                                              On                                         Off

 

  

 

위의 두 아이콘을 사용하기로 했습니다.

 

private static final String ACTION_FLASH_ON ="com.flash.widget.ON";

private static final String ACTION_FLASH_OFF ="com.flash.widget.OFF";

 

 

두 명시적 Intent를 사용해서

 

int flashControl = 0;

 

if(flashControl == 0){
   views.setImageViewResource(R.id.flash_btn, R.drawable.off);
   intent = new Intent(ACTION_FLASH_ON);

 

}else if(flashControl == 1){
    views.setImageViewResource(R.id.flash_btn, R.drawable.on);
    intent = new Intent(ACTION_FLASH_OFF);

 

}

 

Off 상태 : flashControl = 0

 

On 상태 : flashControl = 1

 

다음과 같이 설정하고 ImageView를 클릭에 의해 번갈아 주기로 했습니다.

 

아시겠지만 위젯의 대부분의 명령어 설정은 onUpdate에서 주로 해주는것이 좋고 실질적인 이벤트 코딩은 onReceive에서

 

실행해 주는것이 좋습니다.

 

각 이벤트의 실행은 onReceive에서 앞서 설정해준 명시적 Intent를 통해서

 

 

 

 if(action.equals(ACTION_FLASH_ON)){
   Log.e("Flash state", intent.getAction());
   try{
       flashControl = 1;
    
      AppWidgetManager manager = AppWidgetManager.getInstance(context);
      this.onUpdate(context, manager, manager.getAppWidgetIds(new ComponentName(context, FlashWidgetActivity.class)));
   
   }catch (Exception e) {
    // TODO: handle exception
    Log.e("Flash state", "Flash ON Exception");
   }
  } ...

 

 

 

위와 같은 형식으로 이루어 지면 되겠습니다.

 

 

 

AppWidgetManager manager = AppWidgetManager.getInstance(context);
this.onUpdate(context, manager, manager.getAppWidgetIds(new ComponentName(context, FlashWidgetActivity.class)));

 

 

 

onUpdate에서 onReceive로 onReceive에서는 이벤트를 처리하고 onUpdate로 다시 아이콘을 갱신합니다.

 

그럼 한번 클릭마다 다른 이미지의 아이콘으로 바뀔 수 있겠네요

 

 

 

              

 

  

 

위젯의 크기는 1 * 1인 72dip * 72dip 입니다.

 

 

 

여기까지의 소스를 올려드립니다.

 

 

 

FlashWidget_Toggle.zip
다운로드

 

 

 

 

 

 

반응형
반응형

안드로이드에서 개인 개발자가 게임 아니고서야 효과음 적용할일은 없습니다.

 

 

 

그런데 간혹 1,2가지의 효과음을 내고 싶으면 사용하는게 바로 SoundPool 입니다.

 

 

 

안드로이드는 보통 Audio 재생에 두가지 SoundPool과 MediaPlayer 를 쓸수있습니다.

 

 

 

SoundPool은 용량이 적고 재생시간이 짧은 효과음을 재생하는데 사용하고 시간이 긴 배경음악 같은것들은 MediaPlayer를

 

 

 

사용합니다. 인터넷에서 쉽게 찾을수 있는 예제는 대부분은 메인 Activity에서 SoundPool을 생성하고 스트림 설정, 로드, 재생을

 

 

 

같이 하는데 첨부된 예제는 스트림 설정을 일괄로 하고 각 사운드를 Index 설정하여 숫자로 재생하게 됩니다.

 

 

 

SoundPool.zip
다운로드

 

 

 

간혹 효과음을 사용할때 항상 사용하는 예제 입니다. 깔끔하고 이해하기도 쉬운 예제죠

 

 

 

반응형
반응형

오늘 살펴볼 예제는 안드로이드에서 지원하는 센서의 사용 코딩 예제 입니다.

 

 

 

 

 

 

 

많이 사용하시는 Galaxy S의 경우 상단 왼쪽부터 근접 센서, 조도(밝기)센서, 그리고 카메라 입니다.

 

보통 전화 수, 발신시에 전화에서 얼굴을 때면 화면이 켜지게 되는데 바로 이 근접 or 조도 센서를 이용합니다.

 

위에 or 라고 써놓는 이유는 보통 다 같지 않아서 입니다. 근접 센서로 확인하는 핸드폰도 있고

 

조도 센서로 하는 경우도 있습니다. 또 경우에 따라서 화면의 터치(정전기)를 이용하는 핸드폰도 있습니다.

 

각 센서마다 특징은 있는데 예제를 보시면 조도 센서는 근접 센서보다 반응 속도가 약간 느리다는 걸 보실 수 있습니다.

 

 

 

 

 

 

 

 

근접 센서는 반응속도는 빠르나 거리가 굉장히 짧아 근접센서를 사용해서 어플을 만들기에는 많은 제약이 있습니다.

 

회전이나 가속을 구성하는 센서또한 제조사와 제조 단말기에 따라 다릅니다. 최신 핸드폰의 경우에 자이로 스코프가 있지만

 

기존의 가속 센서를 주로 이용한다거나 자이로 스코프가 아애 없는 핸드폰도 있습니다.

 

보통의 경우 가속, 조도, 근접, 자기 센서는 베이스 모듈이라고 생각하시면 됩니다. 그외 압력, 온도 센서는 추가 사항입니다.

 

예제를 올려드립니다. 즐거운 안드로이드 코딩 되세요!!

 

 

 

AndroidSensorTest.zip
다운로드

 

 

 

반응형
반응형

오늘 만들어본건 Slot Machine 입니다.

우선 각 이미지들은 과일 아이콘을 사용하기로 하고 View Flipper를 이용해서

inAnimation과 outAnimation 속성을 이용하는게 핵심 포인트 입니다.

슬롯머신의 특성상 View Flipper 내의 layer들의 난수 표현은 수학적표현이고

Animation의 연출은 duration의 시간 설정과 Alpha 속성의 0.0 -> 1.0 or 1.0 -> 0.0 과 같이 가장 쉬운

애니매이션으로 표현이 가능합니다.

 

 


사실 슬롯머신을 실제로 해본적은 없습니다. ㅎㅎ

노란 버튼을 클릭하면 세개의 라인 아이콘들이 뱅글 뱅글 돌면서 랜덤으로 놓이게 됩니다.

 

 

반응형

'Android' 카테고리의 다른 글

안드로이드 효과음(SoundPool)  (0) 2012.04.02
안드로이드 센서 사용 모음 예제  (6) 2012.04.01
GestureDetector & Image Rotation  (2) 2012.03.26
같은 그림 맞추기 어플  (39) 2012.03.25
Edge Detection 사용해보자  (1) 2012.03.18
반응형

오랜만에 예제를 찾던중 제스쳐 이벤트와 이미지 3D 로테이션 예제를 찾아 봤습니다.

우선 이전에 커버플로우에서와 동일하게 이미지 로테이션하는 방법은 비슷하고 거기에 제스쳐 이벤트를 덧붙여 봤습니다.



 이미지의 앞면

화면을 오른쪽 -> 왼쪽 이나 왼쪽 -> 오른쪽으로 플리킹 하게 되면



이미지의 뒷면

위와 같이 이미지가 180도 회전하며 뒷면 이미지로 변하게 됩니다.

GestureDetector의 사용법과 함께 이미지 애니메이션 컨트롤을 배울수 있는 좋은 예제 입니다.



반응형

'Android' 카테고리의 다른 글

안드로이드 센서 사용 모음 예제  (6) 2012.04.01
Slot Machine 어플 만들기  (18) 2012.03.31
같은 그림 맞추기 어플  (39) 2012.03.25
Edge Detection 사용해보자  (1) 2012.03.18
Html Parsing 하기 - 라이브러리 첨부  (2) 2012.03.04
반응형

게임류의 기본은 역시 아이교구입니다. 간단한 퍼즐에서 부터, 그림 맞추기, 색칠하기 등이 있는데요.

오늘은 그중 가장 많이 만드는 그림 맞추기를 만들어 봤습니다.


우선 그림판의 숫자는 2*2 에서 부터 6*6 까지 여러가지 인데요

어플의 흐름은 셔플 -> 같은 id의 이미지 뒤집기 -> 완료후 Complete 문구 나오기

아주아주 간단합니다.


그런데 의외로 어렵더라구요. 4*4 만 넘어가도 이건 기억해서 맞추는게 아니라 맞을 때까지 뒤집어 버리는...

참을성이 없어서 ㅎㅎ

전 이런류의 게임 만들기를 아주 좋아합니다.


다 맞췄다!!!



반응형

'Android' 카테고리의 다른 글

Slot Machine 어플 만들기  (18) 2012.03.31
GestureDetector & Image Rotation  (2) 2012.03.26
Edge Detection 사용해보자  (1) 2012.03.18
Html Parsing 하기 - 라이브러리 첨부  (2) 2012.03.04
블루투스 조이스틱 만들기  (27) 2012.03.03
반응형

일단 써치를 해보면 Edge Detection 내용은 많이 나옵니다.

그나마 이해가 잘가는건 http://forum.falinux.com/zbxe/?document_srl=549525

이 사이트 강좌였습니다.

그런데 이상하게 Output 자료의 Bitmap 형이 이래저래 가공하기가 힘들어서 생각대로 만들수가 없습니다.


자료 값들의 수치만 이해가 잘 안가네요. 물론 구현은 하였고 코딩 이해도 어느정도 하였지만 개선시킬 수 있는 방법을

모르겠씀다 ㅎㅎ


뭐 재밌긴하네요 근데 시간좀 걸릴거 같슴다.


반응형
반응형

보통 API를 이용한 xml 파싱은 상당히 보편화 되있고 출력값도 깔끔하기 때문에 많이 애용하지만

HTML 파싱은 상당히 까다로운 부분이 있습니다. 장점이라고 한다면 딱히 정보 공개 필요없이

특정 URL만 알고있다면 패턴을 이용한 특정 TEXT 가져오기가 수월 하다는 점이 있죠

그런데 간혹 패턴없이 잡동사니로 이루어진 소스는 하기가 힘듭니다.

인터넷상에서 가장 보편화된 패턴을 가진 URL중 가장 쉬운건 바로 택배 & 게시판입니다.

가장 많이 사용하는 라이브러리는 제글의 FTP Client 만들기에 첨부되어 있는

commons-net-3.0.1.jar


이것과  jericho 입니다.


jericho-android.3.1.jar


우선 택배조회 중 가장 깔끔한 로젠 택배를 보면 http://www.ilogen.com/d2d/index.jsp 



운송장 번호를 입력하고 검색을 클릭하면

http://www.ilogen.com/iLOGEN.Web.New/TRACE/TraceView.aspx?gubun=slipno&slipno=송장번호

다음과 같은 URL로 송장번호에 대한 정보가 나오게 됩니다.




위와 같게 구성할 수 있습니다. Parser의 코딩은 아주 많은 예제가 돌아다니니 검색해보시면 금세 이해하실 수 있습니다.

이를 이용해서 게시판 파싱 또한


리스트를 만들 수 있습니다.

라이브러리 자체가 좋아 사용법에 따라 다양한 파싱을 할 수 있습니다.


반응형
반응형

2인 블루투스 게임의 경우에 서로의 포인터 or 입력값을 어떻게 움직이고 변화 시키는지 이해하기 위해서 블루투스 관련

예제를 보던중에 재미로 구현 해 보았습니다.



2개의 폰으로 테스트 가능한데요 왼쪽에 보이는 포인터를 클릭하면 서로의 폰의 손가락 아이콘이 움직이게 됩니다.


접속 및 블루투스 설정은 예제 그대로를 사용하였고 기타 부가적인 기능은 추가 코딩했습니다.

우선 블루투스 설정은 예제가 상당히 탄탄히 코딩되어있어서 더이상 손대지 않아도 괜찮겠더군요

코딩이 쉬웠는데 그 이유는 입 -> 출력값이 굉장히 자유로웠습니다.


반응형
반응형

Thread로 UI를 옮기라는 얘길 들었을때 뭐 그저 Thread에 정의하고 옮기기를 하면 되겠거니 생각했습니다.

그런데..


CalledFromWrongThreadException 을 뿜어내며 앱이 바로 죽더군요.

거두절미하고 UI변경을 Thread가 아닌 Handler에서 정의해 주면 됩니다.

0123

반응형
반응형

맵 오버레이는 사용하는 방법에 따라 정말 다양한 효과를 표현 할수있습니다.

기본적인 예제는 다음과 같습니다.


MapOverlay.zip




이미 많은 분들이 알고있는 예제이기 때문에 설명은 따로 하지 않겠습니다.

그런데 우연히 다음과 같은 형식을 맵 위에 나타내야 했는데요


지역별 % 비교를 Bar Graph로 표현해야 하는 것이였습니다.

그래서 bar 형식의 이미지를 사용해 Resize하여 % 와 비슷한 형식으로 나타낼수 있었습니다.


일단 서울지역과 인천만 표현 하였습니다.

그래프 뿐만 아니라 이미지, 텍스트 표현도 자유롭습니다.


반응형
반응형

목적은 전화 수신 화면을 만드는 것이었지만 궁극적으로는 특정 위젯, 레이아웃의 '밀기'를 구현하는 것이였습니다.

검색하던중 처음 접하게 된건 바로 SlidingDrawer 였는데 상당히 코드도 간단하고 아.. 이런게 있었구나 라고 할정도로

내가 참 모르는게 많구나라고 생각했습니다. 일반적인 소스는 다음과 같습니다.


SlidingDrawer.zip


아주 간단한 기본적인 소스로 vertical, horizontal 표현의 bottom -> up ,  right -> left 의 기본 설정에 따른 Slide를 보여줍니다.

0123456


하지만 위와 같은 일반 설정으로는 left -> right 또는 up -> bottom 의 방향은 설정되지 않습니다.


따라서 이러한 화면을 구성하기 위해서는 SlidingDrawer의 일반적인 사용은 무리였습니다.

하루 종일 검색 끝에 만들수있었는데 굉장히 좋은 예제 소스를 발견하였네요

구현한 화면은 다음과 같습니다.

0123456


활용도가 굉장히 높은거 같네요. 신기 신기 +ㅅ+

반응형
반응형

처음 작성했던 기획처럼 Main Page에는 발신자 이미지 설정

발신자 이름, 번호, 그리고 Seek Bar외에 여러가지로 구현된

시간 설정 방법과 함께 Call 시작, 중지, 테스트 의 버튼으로

구성하겠습니다.

 


일단 이미지 부위 클릭시 갤러리로 넘어가게 되고 갤러리에서 선택된 이미지를 발신자 이미지로 설정 하기로 하였습니다

그리고 2개의 EditText 2개를 배치하고 직접 적거나, 전화번호부를 클릭하게 되면 개인 연락처로 이동해서

해당 이름을 클릭하면 이름과, 번호에 설정 되게 하였습니다.



이미지를 클릭하게 되면 갤러리로

 

아직 기능 부분만 구현한 상태로 레이아웃의 위치를 확정한건 아닙니다.

            어떻게 할지 고민을 해봐야 겠네요


반응형
반응형

저번 환경설정에 이어서 발신자 음성 사용하기 부분을 마무리 하겠습니다.

녹음하기의 경우 목록을 2개로 나누었습니다.


음성 녹음 : 마이크 아이콘을 한번 클릭하면 녹음이 시작되고 다시 한번 누르면 녹음이 종료 됩니다.
(녹음 종료와 동시에 상부에 해당 녹음 파일의 경로가 기록됨)
해당음성 사용하기 : 녹음한 파일의 해당 Path를 실제 발신자 음성으로 사용할지 선택하는 부분
이전 파일 사용하기 : 이전에 녹음한 파일  FakeCall 폴더의 파일을 선택할수 있음


다음과 같이 해당 파일의 파일 경로가 표시되게 되고  해당 음성 사용하기를 클릭 하게 되면


다음과 같이 Summary에 해당 경로가 표시 되게 됩니다.

이전 파일 사용하기의 경우엔


이전에 녹음했던 파일들의 File List를 보여주고 선택하게 되면


다음과 같이 해당파일을 발신자 음성 경로로 Summary로 추가 시킵니다.


일단 모두 문제 없이 구동 완료 했네요.

음성 녹음도 무난히 구성 하였습니다.

반응형
반응형

저는 항상 개발 초기에 환경설정 부분을 먼저 하는 편입니다.

그래야 개발 순서가 그에 따라서 맞춰나갈수 있기 때문에 큰 컨셉을 유지 하고 환경설정에서 한정되는 부분만 처음 코딩

합니다. 코딩 화면은 다음과 같습니다.


일단 카테고리는 총 3개 이고 원래 의도한 계획에 맞춰 코딩하였습니다.

setting.xml

 <?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
  xmlns:android="
http://schemas.android.com/apk/res/android"
  android:key="preference_fake">
    <PreferenceCategory
  android:key="category1"
  android:title="소리 설정"
  android:enabled="true">
    <CheckBoxPreference
  android:key="ring_preference"
  android:title="소리 설정"
  android:summary="진동/벨소리 설정"
  android:defaultValue="false"/> 
    <CheckBoxPreference
  android:key="vibration"
  android:title="진동"
  android:summaryOn="On"
  android:summaryOff="Off"
  android:enabled="false"
  android:defaultValue="false"/>
    <RingtonePreference
  android:key="ringtone"
  android:title="벨소리 설정"
  android:showDefault="true"
  android:showSilent="true"
  android:ringtoneType="all"
  android:enabled="false"
  android:summary="수신 벨소리를 설정 합니다"/>
 </PreferenceCategory>
 <PreferenceCategory
  android:key="category2"
  android:title="화면 설정"
  android:enabled="true">
 <ListPreference
  android:key="pagelist"
  android:title="수신화면 설정"
  android:entries="@array/entries_page"
  android:entryValues="@array/entryValues_page"
  android:defaultValue="Samsung" />
 </PreferenceCategory>
 <PreferenceCategory
  android:key="category3"
  android:title="발신자 음성"
  android:enabled="true">
    <CheckBoxPreference
  android:key="audio_preference"
  android:title="음성 사용"
  android:summaryOn="On"
  android:summaryOff="Off"
  android:defaultValue="false"/>
    <PreferenceScreen
  android:key="audio_preference_custom"
  android:title="직접 녹음 하기"
  android:summary=""
  android:enabled="false">
    </PreferenceScreen>
    </PreferenceCategory> 
</PreferenceScreen>

PreferenceActivity 세부 기능은 다음과 같습니다.


벨소리 설정의 RingTone Preference를 이용해서 가져온 RingTone Title을 Summary에 변경시키고

수신 화면또한 Samsung, SKY, LG 3부류의 ListPreference로 나누어 Summary의 내용을 변경시킵니다.

발신자 음성은 마이크 녹음을 통해서 직접 파일 생성하여 사용할 예정입니다.


반응형
반응형

Splash Page - 없음
① Main Page 
     1. 발신자 이미지
         - 갤러리 설정
     2. 발신자 이름
     3. 발신자 번호
         - 전화번호부 설정
     4. 시간 설정(Check box)
          - 5초, 15초, 30초, 1분(Button)
          - 1분~60분(Seek Bar)
          - 커스텀 설정(Time Picker )
     5. 시작(Button)
     6. 테스트(Button)
     7. 끝내기(Button)
② 예약 Page(ListView)
③ Preference Page
     1. 소리 설정
         - 진동(On/Off)
         - 벨소리 선택
     2. 수신 화면 Page 설정
         - 삼성, SKY, LG
     2. 전화 받기 설정
         - 사용자 음성 파일 사용하기
④ 수신 화면 Page(삼성, SKY, LG)
     1. 전화 받기
     2. 전화 끊기

자 이제 계획은 짯으니 만들어 볼까

반응형
반응형

역시나 심심할때 시간 때우기는 레이아웃 바꾸기 만큼 시간 빨리 가는것도 없죠



소녀시대 플레이어~

생각해보니 동영상 캡쳐는 안되는군요? 몰랐네 찾아봐야징~

반응형
반응형

저는 안드로이드 코딩중에 재일 싫어라 하는것이 바로 위젯 만드는겁니다.

이유는 단지 귀찮아서 입니다 -_-;;

provider, receiver 등을 컨트롤 하는게 정말 귀찮습니다.

위젯에 대해 간단한 코딩을 검색 하던중 PendingIntent 를 사용한 암묵적 Intent 넘기기 예제는

상당히 많다는거였습니다. 그런데 Button을 생성해서 Button에 Intent가 아닌 클릭 이벤트를 주는

예제는 많이 없다는걸 알았습니다. 이번 코딩의 주목적은 녹음기 위젯을 만드는 것이였고

버튼의 클릭이벤트로 Record Start, Stop을 코딩해야 하기 때문에 단지 Activity를 실행한다던지

암묵적 Intent를 사용한 자료넘기기는 별로 쓸모가 없었습니다.


다음과 같이 Start, Stop 버튼만 있으면 되는것이었습니다.

그럼 어떻게 버튼 클릭 이벤트를 실행 하느냐? 바로 명시적인 Action Intent를 사용하면 되는 것입니다.

일단 풀소스를 파일 첨부 합니다.

WidgetTest.zip

소스를 보면 알겠지만 간단합니다.

AndroidMenifest 파일에

            <intent-filter>
               <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>
               <action android:name="com.record.widget.RECORDE"/>
               <action android:name="com.record.widget.STOP"/>
            </intent-filter>

다음과 같은 Intent-filter를 주고

AppWidgetProvider에 다음과 같이

public static final String ACTION_RECORDE ="com.record.widget.RECORDE";
public static final String ACTION_STOP ="com.record.widget.STOP";

static으로 선언해준다음

Intent recordIntent = new Intent(ACTION_RECORDE);
PendingIntent recordPendingIntent = PendingIntent.getBroadcast(context, 0, recordIntent, PendingIntent.FLAG_UPDATE_CURRENT);
views.setOnClickPendingIntent(R.id.record_Btn, recordPendingIntent);

다음과 같이 AppWidgetProvider 자신에게 PendingIntent를 넘겨주면 onReceiver에서

String action = intent.getAction();
  
     if(action.equals(ACTION_RECORDE)){
   Log.e("Recording","START");
   try{
        
   }catch (Exception e) {
    // TODO: handle exception
   }
  }else if(action.equals(ACTION_STOP)){
   Log.e("Recording ","STOP");
   try{
    
   }catch (Exception e) {
    // TODO: handle exception
   }
  }

다음과 같이 각 action에 대한 실행을 컨트롤 할수있습니다.

이 어플은 위젯녹음기에 대한 코딩내용이고 현재

Start를 클릭하면 마이크의 소리를 녹음하여 SDCard에 파일로 저장하는것 까지 진행 하였습니다.


반응형
반응형

1년 전쯤 http://www.inter-fuser.com/2010/02/android-coverflow-widget-v2.html 다음과 같은 내용을 보면서

 나름 한동안 정말 혁명이다 이런생각을 한적이 있습니다.

물론 아이폰과의 특허 얘기는 접어두더라도 코드 자체가 굉장히 재밌기 때문에 연구 할만한 내용이었습니다.

하지만 위 코딩이 초보때 저에겐 주무르기가 어려웠습니다.

얼마전에 재미로 한번 해볼까나 라고 생각하고 만들어 볼수 있었습니다.

위의 사이트에 나와있는 내용 그대로의 어플은 다음과 같습니다. 



인터넷에 내용들을 취합 하더라도 처음 Custom하게 변경할수 있는것은 XML을 커스텀하게 짜는것

그것 뿐입니다.

그래서 제가 만든건 바로 이렇습니다.


SD Card의 이미지를 CoverFlow로 갤러리 형식으로 나타 내는 것이었죠

그래서 만들었습니다.


다음과 같이 SD Card의 이미지를 CoverFlow 형태로 만들고

각 이미지를 롱클릭하게 되면


다음과 같이 POPUP 형태로 Animation을 추가 시켜서 보여주게 됩니다.

재밌네요.

써먹을때는 많습니다. 위와 같은 갤러리로도 표현할수있고 앞서 썻던 내용중 MP3의 앨범을 만들수도 있고

잡지등을 만들수 있습니다.

반응형

'Android' 카테고리의 다른 글

동영상 플레이어  (0) 2011.12.18
위젯 클릭 이벤트  (1) 2011.12.18
어플리스트로 특정 어플 실행 시키기  (2) 2011.12.11
마이크의 소리를 Frequency or Decibel로 나타내기  (17) 2011.12.04
2D Frame Animation  (0) 2011.11.27
반응형

API Demo는 참 공부하기 좋은 예중에 하나 입니다.

그중에 Grid View라는걸 공부하던 중 각 어플 이름도 표현하고 누르면 실행 시키면 재밌겠다 라는 생각에

요래조래 만저본 결과  원래의 모습은


이와 같이 각 어플의 라벨이 나오지 않고 클릭이후 어플 실행도 되지 않습니다.


그래서 바꾼게 바로 이와 같이 각 어플 이름이 나오게 되고 클릭하게 되면


각 어플을 실행하게 만들었습니다.

API Demo 재밌네요

확장시키자면 쓸모는 많은 편입니다. 응용프로그램이나 파일 or APP 관리 툴정도에서 간단히 쓸수있는 형식이죠

코딩도 매우 간단합니다.


반응형

'Android' 카테고리의 다른 글

위젯 클릭 이벤트  (1) 2011.12.18
CoverFlow 내맘대로 바꾸자  (37) 2011.12.11
마이크의 소리를 Frequency or Decibel로 나타내기  (17) 2011.12.04
2D Frame Animation  (0) 2011.11.27
네이버 검색 API 사용하기(책,쇼핑)  (6) 2011.11.27
반응형

우연한 기회로 제목과 같은 코딩을 진행한적이 있습니다.

여러 자료를 취합해서 만든결과 Audio의 컨트롤이 굉장히 힘들다는걸 깨달았죠...

일단 Frequency를 표현하기 위해 FFT관련 내용들을 읽어보고 또 읽어봤습니다.

상당히 어렵네요...


일단 Hertz 계산 및 표현을 간단히 TextView로 나타냈습니다.

상당히 민감하더군요... 주위 소음도 400대 이상을 보여주네요. 이게 맞는건지 히히

Decibel 계산은 생각보다 간단 하였습니다.


어렵네요... 일단은 생각대로 나왔으니 패쓰!


반응형

'Android' 카테고리의 다른 글

CoverFlow 내맘대로 바꾸자  (37) 2011.12.11
어플리스트로 특정 어플 실행 시키기  (2) 2011.12.11
2D Frame Animation  (0) 2011.11.27
네이버 검색 API 사용하기(책,쇼핑)  (6) 2011.11.27
Music Player  (0) 2011.11.27
반응형

굳이 사용할 필요는 없지만 알면 재밌는것중 하나가 바로 Frame Animation입니다.

코딩도 매우 간단합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"    
 android:oneshot="false">    
<item android:drawable="@drawable/img1" android:duration="100" />    
<item android:drawable="@drawable/img2" android:duration="100" />    
<item android:drawable="@drawable/img3" android:duration="100" />
<item android:drawable="@drawable/img4" android:duration="100" />
<item android:drawable="@drawable/img5" android:duration="100" />
<item android:drawable="@drawable/img6" android:duration="100" />
<item android:drawable="@drawable/img7" android:duration="100" />
<item android:drawable="@drawable/img8" android:duration="100" />
<item android:drawable="@drawable/img9" android:duration="100" />
<item android:drawable="@drawable/img10" android:duration="100" />
<item android:drawable="@drawable/img11" android:duration="100" />
<item android:drawable="@drawable/img12" android:duration="400" />
<item android:drawable="@drawable/img13" android:duration="400" />
<item android:drawable="@drawable/img14" android:duration="400" />
<item android:drawable="@drawable/img15" android:duration="400" />
</animation-list>
cs


안드로이드 개발자 사이트에도 나와있듯이

imageview = (ImageView)findViewById(R.id.framImg);
imageview.setBackgroundResource(R.anim.frame_anim);
animation = (AnimationDrawable)imageview.getBackground();

다음과 같이 애니매이션 객체를 불러와

animation.start();

시작하게 되는데요

어째서인지 이를 바로 start()하게 되면 애니매이션이 1번에서 움직이지 않더라구요

버튼을 생성해 animation.start(); 를 임의로 실행시키면 애니매이션이 진행됩니다.

그래서 할수 없이 생각한게


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
void aniThread(){
     
     Thread thread = new Thread(new Runnable() {
   
   @Override
   public void run() {
    // TODO Auto-generated method stub
    try{
     
        animation.start();
     
     aniHandler.sendEmptyMessage(0);
     
    }catch (Exception e) {
     // TODO: handle exception
    }
   
   }
  });
     
     thread.start();
    }
    
    private Handler aniHandler = new Handler(){
      public void handleMessage(Message msg){
       
       
      }
      
    }; 
cs

다음과 같이 임의로 쓰레드를 돌려주는것이였습니다.


반응형

'Android' 카테고리의 다른 글

어플리스트로 특정 어플 실행 시키기  (2) 2011.12.11
마이크의 소리를 Frequency or Decibel로 나타내기  (17) 2011.12.04
네이버 검색 API 사용하기(책,쇼핑)  (6) 2011.11.27
Music Player  (0) 2011.11.27
FTP Client 만들기  (53) 2011.11.27

+ Recent posts