Skip to content

najunhee/markj

 
 

Repository files navigation

MarkJ Android Framework

안드로이드를 개발하다 보면 굉장히 어려운 UI Manipulation을 겪게 됩니다.
특히 AsyncTask와 UI 화면전환은 개발에 큰 걸림돌이 되곤 합니다.
개발자에게 복잡한 GUI는 비지니스 로직에 투자할 시간을 GUI 코딩에 허비하게 만듭니다.
UI Manipulation을 쉽고 빠르게 개발할수 있는 라이브러리가 필요했고 이런점을 해결하기 위해 나온 라이브러리가 MarkJ입니다.

MarkJ 에는 다음과 같은 기능들이 있습니다.

  • Less Code
  • Quick and easy UI Manipulation
  • Convenient Async Callback
  • Binding
  • Bluetooth
  • Custom view
  • Utillity
  • Support multiple versions

##Less Code View Injection 을 활용할수 있는 Annotion과 UI Controller를 이용하면 코드가 엄청나게 줄어들 수 있는 다양한 기능이 있습니다.
Viewer방식으로 화면별/기능별로 Viewer를 분류하므로써 기존코드를 활용하고 간결하며 직관적인 코드로 관리할수 있습니다.
또한 A-Query, Roboguice나 Android annotation같은 외부 라이브러리를 아무런 제약없이 조합함으로써 더좋은 개발 퍼포먼스 낼수 있습니다.

ex) 아래는 같은 동일한 역할을 하는 소스코드 비교 예제입니다.
[기존]

	public class MainActivity extends Activity{
		private TextView text;
		private Button btn1;
		private Button btn2;
		private Button btn3;
		private Button subActivity;
	
		@Override
		protected void onCreate(Bundle savedInstanceState) {
			super.onCreate(savedInstanceState);
			setContentView(R.layout.sample_projects);
			
			text=(TextView)findViewById(R.id.text);
			String param = getIntent().getExtras().getString("name");
			text.setText(param); //외부에서 받아온 parameter 출력
			
			btn1 = (Button)findViewById(R.id.btn1); //버튼1 Click
			btn1.setOnClickListener(new OnClickListener() {
				@Override
				public void onClick(View v) {
					Log.d("SubActivity","btn1 Click!");
				}
			});
			
			btn2 = (Button)findViewById(R.id.btn2); //버튼2 Click
			btn2.setOnClickListener(new OnClickListener() {
				@Override
				public void onClick(View v) {
					Log.d("SubActivity","btn2 Click!");
				}
			});
			
			btn3 = (Button)findViewById(R.id.btn3); //버튼3 Click
			btn3.setOnClickListener(new OnClickListener() {
				@Override
				public void onClick(View v) {
					Log.d("SubActivity","btn3 Click!");
				}
			});
			
			subActivity = (Button)findViewById(R.id.subActivity); //SubActivity 호출
			subActivity.setOnClickListener(new SubActivityShow("What's up?"));
		}
		
		class SubActivityShow impelements OnClickListener{
			private String say;
			
			public SubActivityShow(String say){
				this.say = say;
			}
			
			@Override
			public void onClick(View v) {
				Intent intent = new Intent(MainActivity.this, SubActivity.class);
				intent.putExtra("say", say);
				startActivity(intent);
			}
		}
	}

[MarkJ]

   public class MainViewer extends JwViewer{
   	@getViewClick Button btn1; // Annotion injection
   	@getViewClick Button btn2;
   	@getViewClick Button btn3
   	
   	@Override
   	public void view_init() {
   		TextView(R.id.text).setText(getParam("name")); //외부에서 받아온 parameter 출력 
   		setOnClickParamListener("sub_Viewer", R.id.sub_Viewer, "What's up?"); // Code base injection
   	}
   	
   	public void sub_Viewer(View v, String clickParam){ //SubViewer 호출
   		getViewer(R.layout.sub,SubViewer.class).addParam("say", clickParam).change(getParent());
   	}
   	public void btn1(View v) { //버튼1 Click
   		Log.d("SubActivity","btn1 Click!");
   	}
   	public void btn2(View v) { //버튼2 Click
   		Log.d("SubActivity","btn2 Click!");
   	}
   	public void btn3(View v) { //버튼3 Click
   		Log.d("SubActivity","btn3 Click!");
   	}
   }

##Quick and easy UI Manipulation 현실적으로 GUI 개발에 있어서 안드로이드는 매우 취약합니다.
원하는 디자인과 구성을 위해때론 많을 시간을 소비해야할 때가 많습니다.
기본 View에 복잡한 디자인 적용이 어렵고 이벤트에 따른 동적 화면을 표현 하기가 쉽지 않습니다.
XML Layout을 구현하는 code는 Activity, Flagement 등에 의존적이여서 code의 분류와 구성또한 어렵습니다.
MarkJ는 Activity, Flagement에 영향을 받지 않아 code를 화면별 조각인 Viewer로 분류하고 Viewer를 조합하여 새로운 화면을 구성합니다. 하나의 Layout에 필요한 Viewer를 조합하여 동적으로 바인딩하는것을 기본으로 합니다.
이런점은 이벤트나 특정 상황에서 쉽게 동적인 표현을 할수 있게 해줍니다.
다시말해 컴퍼넌트 형식 처리로 Layout에 전체가 아닌 특정 부분만 바인딩하여 시스템 자원과 개발 시간을 단축할 수 있습니다.
여기에 Viewer에 내장된 Injection, Async init, method binding 기능은 쉽고 빠르게 UI Manipulation을 하도록 도와 줍니다.

##Convenient Async UI Manipulation
Viewer는 바인딩 되기전 AsyncTask를 수행할수 있는 기능을 지원합니다.
Viewer 내부의 loading 메소드를 재정의 함으로써 쉽게 AsyncTask를 사용할수 있으며 AsyncTask가 수행하는 동안 Viewer load 화면을 설정 할수 있습니다.

[채팅 화면을 Async로 갱신하는 예제]

.... 
//Async로 화면 바인딩
getViewer(R.layout.sub,Test.class).change(ParentsView);
....

//바인딩을 받는 Viewer
public class Test extends JwViewer{
	@Override
	public boolean loading() {
		/* 네트워크 및 Thread 작업 실행 */
		setLoadingParameter("say", "What's up?");//결과 설정
		return true;
	}
	@Override
	public void view_init() {
		TextView(R.id.say_text).setText((String)getLoadingParameter("say"));
	}
}

##Binding MarkJ를 사용하면 Listener를 사용하기 편리해 집니다.
Listener 클래스를 만들지 않아도 되고 내부 클래스로 만들지 않아도 되고
Listener 인터페이스를 implement 하지 않아도 됩니다.
Listener를 바인딩 할때 Parameter 또한 쉽게 전달 할수 있습니다.
Annotation과 code로 Listener를 바인딩 할수 있는 두가지 방법을 제공합니다.

[Code Base 방식]

//함수명을 "say"를 명시하고 파라미터를 던져줄수 있다.
public void view_init(){
	String param = "what's up?"
	setOnClickParamListener("say", R.id.say, param); 
}
//파라미터를 전달 받을수 있다.
public void say(View v, Object param){
		Log.d("MarkJ",param.toString());
}

[Annotation방식]

해당 아이디명과 listener함수명 동일
@getViewClick View say; //객체 Injection

public void say(View v){
		Log.d("MarkJ","What's up?");
}

##Custom view GUI 개발시 화려한 디자인 구현과 단말 기종에 따른 스크린사이즈 문제에 어려움이 있습니다.
예를들어 WheelView 나 그래프의 경우 오픈소스를 많이 쓰고 있습니다.
오픈소스는 필요한 디자인을 적용하는데 한계가 있고 Code로 사이즈를 지정하는 등 여러 단말에 적용하기가 까다롭습니다.
Code Base형태로 제공되는 오픈소스 Custom View는 구현과 디자인 적용에 어려운 실정 입니다.
MarkJ에서 제공하는 Custom View는 IDE Layout Editor에서 Drag and Drop 형태로 제공하고 있어 굉장히 쉽고 편리합니다.
또한 그위에 디자인을 입히는 형식이라 복잡한 디자인을 쉽게 적용할수 있습니다.
Touch 및 Animation 등의 모듈을 제공하여 Active한 화면을 구성할수 있게 도와 줍니다.
MarkJ를 사용하면 android에서 제공하는 Widgets의 대부분을 custom하여 제공하고 있으며
그 밖에 멀티 윈도우, 각종 그래프 등등 개발에 유용한 주요 Custom View를 다수 제공하고 있습니다.

Drag and Drop으로 쉽게 Custom View 사용

다양한 Custom View가 있지만 몇가지만 소개 합니다.
-각종 Graph View, Wheel View, Paper View

   

##Utillity 개발에 도움을 주는 Utillity를 쉽게 사용할수 있는 모듈을 제공합니다.

  • XML,JSon Parser/converter
  • File handler
  • Bluetooth(Multiple access 지원)
  • Sound
  • WebConnection
  • GUI Theme
  • Preperence DataBase
  • 기타 UI Manipulation을 위한 전반적인 모듈제공
 MarkJ Utillity 사용 스크린샷(혈당관리 Sample App)
 1.다중접속이 가능한 bluetooth 라이브러리사용
 2.MarkJ GUI Theme 적용 

##Support multiple versions 하나의 코드로 여러개의 Android Version을 지원할수 있습니다.
Viewer는 view의 기본 속성만으 사용하여
Android 2.2이상 모든 버전에 호환이 가능합니다.
*Custom View의 경우 4.0이상 추가된 기능에 따라 만들어진 View는 MarkJ.v14 라이브러리로 따로 제공

About

Android Async MVC Framework

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 100.0%