Programming/Android2012.06.18 00:35

이런 저런 앱을 만들다 보니 activity전환 속도나 광고 노출 유지를 위해서 하나의 Activity에서 여러개의 다른 뷰를 보여줄 필요가 있었습니다.

기존에 제공되던 ViewFlipper를 관리할 수 있는 Manager를 제작하였습니다. ViewFlipper가 순서대로 동작되는 단점이 있습니다. 이 점을 극복하기 위해 Manager는 지정된 View로 이동시 필요한 만큼의 이동을 하게 됩니다.

사용하는 방법은 간단 합니다. ViewFlipper 안에 어떤 뷰가 순서대로 적용되어 있는지 알아야 합니다. 그리고 그 순서에 맞게 type을 등록하면 됩니다.

간단한 예제로 보는게 빠를 것 입니다. 간단하게 TabView형식으로 구현한 예제입니다.


main.xml



	
	    
	    
	
	
	    
	   	
	

TypeManagerTestActivity.java

package com.yhg.test.typemanager;

import yhg.library.view.manager.TypeViewManager;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ViewFlipper;

public class TypeManagerTestActivity extends Activity {
	public static final String TYPE_A = "a";
	public static final String TYPE_B = "b";
	
	protected TypeViewManager mManager;
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        ViewFlipper viewFlipper = (ViewFlipper) findViewById(R.id.viewFlipper);
        mManager = new TypeViewManager(viewFlipper);
        mManager.addType(TYPE_A);
        mManager.addType(TYPE_B);
        mManager.setStartType(TYPE_A);
        
        View menuA = findViewById(R.id.menuA);
        View menuB = findViewById(R.id.menuB);
        
        menuA.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View v) {
				mManager.showTypeView(TYPE_A);
			}
        });
        
        menuB.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View v) {
				mManager.showTypeView(TYPE_B);
			}
        });
    }
}

사용법은 위와 같습니다. 간단합니다. 실제로 어떻게 구동되는지는 아래 동영상을 참고하세요.



데모 동영상을 한번에 찍다 보니.... 약간 엉성하네요 하하하하

정말 간단한 기능이고 TypeViewManager에도 별로 대단할 것 없습니다. 내부 코드는 다음과 같습니다.


TypeViewDistance.java


TypeViewManager.java


다음에는 view 변경시 이벤트 처리를 하도록 해야겠습니다.

정리를 해보려고 해도 글은 적게 써지네요.....;;

Posted by 초프(초보 프로그래머)

2달 만의 업데이트입니다.

문제를 알고 있으면서도 놔둔 것이 많은 사용자들이 앱을 지우는 원인이 된 것 같습니다.

진작 오류를 해결하지 못한 것을 후회하며.... 늦었지만 업데이트 완료하였습니다.


수정 내용

- 추가화면에서 오른쪽 버튼 선택하여 `좌석현황`을 선택할 경우 오류로 앱이 종료

- 추가화면에서 오른쪽 버튼 선택시 `나의 도서관 추가` , `나의 도서관 삭제` 메뉴 추가

- 업데이트 이력, 개발자 정보 수정

- `나의 도서관` 화면에서 back키 누르면 앱을 강제 종료 시키던 것을 정상 종료 시키도록 변경



Posted by 초프(초보 프로그래머)
Programming/Android2011.12.13 09:30
BroadcastReceiver 예제입니다.

앱이 추가되고 삭제될때 receive 하는 예제입니다.
package com.yhg.sample;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

public class PackageReceiver extends BroadcastReceiver {

	@Override
	public void onReceive(Context context, Intent itt) {
		String packageName = itt.getData().getSchemeSpecificPart();
		String action = itt.getAction();
		
		if(action.equals(Intent.ACTION_PACKAGE_ADDED)){
			Log.d("ADDED",packageName);
		}
		else if(action.equals(Intent.ACTION_PACKAGE_REMOVED)){
			Log.d("REMOVED",packageName);
		}
	}

}

package com.yhg.sample;

import android.app.Activity;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;

public class SampleActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        this.registerReceiver(new PackageReceiver(), new IntentFilter(Intent.ACTION_PACKAGE_ADDED));
    }
}




    

    
        
            
                

                
            
        
        
        
            
                
                
                
            
        
    




 
 
Posted by 초프(초보 프로그래머)
많은 분들이 기다리던 휴관일, 이용시간 정보가 제공되기 시작하였습니다.
아직 완벽하지 않은 기능입니다. 보완해야할 부분이 많습니다.
완벽하게 하려고 하면 너무 늦어지게 될것 같아 빨리 올려봅니다.



휴관일 정보가 없을 경우
휴관일 정보가 있을 경우
이용시간 정보가 있을 경우

등의 이미지 입니다.

휴관일 정보가 없는 경우는 365일 개방이거나 정보를 입력하지 않은 것입니다.

다음에는 더 보완된 정보와 기능들로 업데이트하도록 하겠습니다. 
Posted by 초프(초보 프로그래머)
Project2011.10.06 15:17
우연히 동기의 질문에 오랫만에 다시 YHGCommunication 과 관련된 글을 확인하게 되었습니다.

잘 모르고 빨리 만들다 보니 허접한 코드가 되어 버렸습니다.
이벤트 방식의 메세지 처리, 객체 직렬화 메세지 전송 등 비 효율적인 면이 많이 있었습니다.
이 부분을 좀 더 수정해서 새로운 버전의 YHGComm 을 새로 만들까 하는 욕심이 생깁니다.


주요 수정 사항
1. 받은 메세지 처리 방식 수정
2. 전송되는 메세지 구조 수정
3. 서버에서 다양한 사용자 정보를 관리
4. 사용자 고유 번호 할당
5. Android 에서 UI thread 오류 없이 쉽게 동작

기대 효과
1. 많은 수의 메세지 클래스가 줄어듬
2. 조금 더 효율적인 전송 메세지 크기
3. 서버의 확장성
4. 타 플랫폼(Android)와의 호환성
5. 오류 수정

현재 메세지 처리 방식과 사용자 고유방식 관리에 대해서는 어느 정도 구상이 끝났습니다.
문제가 되는 부분은 전송 메세지 구조입니다. 최소한으로 전송하기 위해 어떻게 해야할지 고민이 되고 있습니다. 
모르는 것이 많다 보니 생각할 것도 많습니다.

언제 작업하고 언제 완성될지 모르겠지만 꼭 해볼렵니다.
이걸 실제로 사용하는 분이 있는지는 모르겠지만...  
Posted by 초프(초보 프로그래머)



위의 이미지는 현재 작동중인 앱을 캡쳐한 이미지입니다.

보시는 것과 같이 기본적으로 2가지 형태로 대기자 정보가 표시됩니다.

1. 전체 열람실 대기자
2. 열람실별 대기자
3. 청소년, 성인 대기자 (작업 예정) 
4. 기타

도서관을 차례대로 하나씩 늘려 갈 예정입니다.
특별한 형태의 폼을 가지고 있는 도서관은 늦어 질수 밖에 없습니다.
되도록이면 많은 도서관이 함께 사용하는 폼을 먼저 작업하려 합니다.

이용시간, 휴관일 정보는 데이터는 들어 있지만... 자료검증을 다시 해야 하는가... 에 대한 고민에 빠져 있습니다.
결정나는데로 바로 작업 하도록 하겠습니다. 
Posted by 초프(초보 프로그래머)
전 버전에서 사라졌던 새로고침 버튼을 새로 넣었습니다.
기존과 다른 도서관명 옆에 위치시켰습니다.
안드로이드 기본 버튼이 아닌 이미지를 넣어 봤어요~ 역시 뭔가 이미지가 잇어야.... ㅋ
 
Posted by 초프(초보 프로그래머)
Programming/Android2011.09.02 11:50
정확하게는 아니지만... 다른 분들의 의견과 저의 의견을 종합하여 내린 결론! 

onItemClickListener 은 말 그대로 터치하여 클릭되었을 경우 발생하는 이벤트입니다. down -> up 이 되어야 발생합니다.

onItemSelectedListener 은 방향키나 트랙볼등으로 이동하였을 경우 포커스를 가지게 될때 발생하는 이벤트입니다.
Posted by 초프(초보 프로그래머)
Programming/Android2011.08.31 10:56

제어판 > 시스템 > 고급 > 환경변수 > 시스템변수

변수 이름 : ANDROID_SDK_HOME
변수 값 : D:\android-sdk-windows

이클립스가 켜 있는 상태라면 종료하고 다시 실행하셔야 합니다.



Posted by 초프(초보 프로그래머)
Programming/Android2011.08.25 13:25
Cursor 를 생성하여 사용할때 사용합니다.
startManagingCursor 를 사용하게 되면 Activity 주기에 따라 알아서 Cursor를 관리해 준다고 합니다. 
간단히 알아본 봐로는 한가지 예를 알 수 있었습니다.

Activity 가 소멸될때 onDestory 가 호출될때... Cursor를 close 해줘야 하지만
startManagingCursor를 사용하면 자동으로 close 해준다고 합니다. 
Posted by 초프(초보 프로그래머)