검색결과 리스트
Mobile Programming에 해당되는 글 28건
- 2010.11.04 Android 입문자를 위한 Tutorial - 5. ArrayList
- 2010.10.25 Win32 API에서 영상처리를 위해 이미지로부터 픽셀 배열 얻어오기
- 2010.10.21 Android 입문자를 위한 Tutorial - 4. 라디오 버튼 2
글
Android 입문자를 위한 Tutorial - 5. ArrayList
Mobile Programming/Android
2010. 11. 4. 14:14
arrayList를 확장하여 이용하는 뷰가 참 많이 있다.
먼저 가장 많이 사용하는 "리스트뷰", 말 그대로 여러정보를 리스트를 뿌려주듯이 뿌려줄 수 있다.
adapter를 이용하기 위해서 먼저 ArrayList를 만들고 ,
ArrayListItems; ArrayAdapter Adapter; ListView list; Items = new ArrayList (); Items.add("First"); Items.add("Second"); Items.add("Third");
Array Adapter를 만들어줘야한다.
Adapter = new ArrayAdapter(this, android.R.layout. simple_list_item_multiple_choice, Items);
그 뒤에 listview에 연결시켜주면 된다.
list.setAdapter(Adapter); list.setChoiceMode(ListView.CHOICE_MODE_SINGLE);.
다음으로 스피너는
팝업창을 통해서 리스트 뷰를 띄워주는 형태라고 생각하면 될 것 같다.
다음은 스피너를 이용하는 소스이다.
package geng.mm.jnu; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.RatingBar; import android.widget.Spinner; import android.widget.TextView; import android.widget.Toast; import android.widget.AdapterView.OnItemSelectedListener; public class fruitrating extends Activity { /** Called when the activity is first created. */ ArrayAdapter;adspin; RatingBar mRating; TextView mRateText; String fruit; float rate; //채워넣을 곳// public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.fruitrating); mRating = (RatingBar)findViewById(R.id.ratingbar); mRateText = (TextView)findViewById(R.id.ratetext); Spinner spin = (Spinner)findViewById(R.id.myspinner); spin.setPrompt("과일을 고르세요."); adspin = ArrayAdapter.createFromResource(this, R.array.fruits, android.R.layout.simple_spinner_item); adspin.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spin.setAdapter(adspin); spin.setOnItemSelectedListener(new OnItemSelectedListener() { public void onItemSelected(AdapterView parent, View view, int position, long id) { //채워넣을 곳// fruit = (String) adspin.getItem(position); } public void onNothingSelected(AdapterView parent) { } }); mRating.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() { public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) { mRateText.setText("Now Rate : " + rating); rate = rating; //채워넣을 곳// String tmp ; if(rate<1){ tmp = "나빠"; }else if(rate < 2.5) tmp = "괜찮아"; else if(rate<3.9) tmp = "좋아!"; else tmp = "완전좋아~!!"; Toast.makeText(fruitrating.this, fruit + "는 "+ tmp , Toast.LENGTH_SHORT).show(); } }); } }
<string-array name="fruits">
<item>사과</item>
<item>감</item>
</string-array>
와 같이 xml에 넣어주었다.
rating chanaged 메서드와 , itemselected 메서드로 변화를 감지해서 클릭된 스피너의 아이템을 알아내고 그에 따라 토스트를 출력한다.
'Mobile Programming > Android' 카테고리의 다른 글
Android 입문자를 위한 Tutorial - 7. 탭뷰의 이용 (0) | 2010.11.10 |
---|---|
Android 입문자를 위한 Tutorial - 6. 커스텀 위젯 (0) | 2010.11.09 |
Android 입문자를 위한 Tutorial - 4. 라디오 버튼 (2) | 2010.10.21 |
Android 입문자를 위한 Tutorial - 3. Layout (0) | 2010.09.28 |
Android 입문자를 위한 Tutorial - 2. Hello Android! (0) | 2010.09.28 |
설정
트랙백
댓글
글
Win32 API에서 영상처리를 위해 이미지로부터 픽셀 배열 얻어오기
Mobile Programming/Windows Mobile
2010. 10. 25. 21:19
먼저 대단히 좋은 참고가 된 지식인 유저분과, 이 지식인을 찾기 위해 함께 고생해주신 우리 06학번 오빠한테 감사하다는 말씀을!
http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=1040101&docId=67833701&qb=aGJpdG1hcCDtlL3shYAg7Ja77Ja064K06riw&enc=utf8§ion=kin&rank=1&search_sort=0&spq=0&pid=gKSisv331xCsscnLn1Vssv--272669&sid=TMVVR@dHxUwAAGI6EQQ
윈모는 아니지만, 모체가 되는 API에 대해 글 하나 올리려합니다 ㅋ
그동안 영상처리를 위해 픽셀을 받아오는 건 그냥 와인라벨하던 프로젝트의 솔루션 기본 파츠를 그냥 그대로 들고오던거라 어떻게 얻어오는지 전혀 몰랐습니다.
지능시스템을 위해서 영상처리가 필요했는데 , 역시 픽셀을 얻어오는 것이 선행되어야 합니다.
DDB(Device Dependent Bitmap)는 처리속도가 낮고 배열로 취급하기가 어려워
DIB 이미지에서 픽셀배열을 얻어오는편이 편하다고 합니다.
1차원 배열을 얻어오는 점이 아직 문제가 되긴 합니다만 ,
어쨋거나 DIB에서 픽셀배열을 얻어오는데 필요한 구조체는
1. DIBSECTION
2. RGBTRIPLE (여기에 RGB값이 들어있습니다)
입니다 .
#define HBYTES(w, b) ((((w) * (b) + 31) & ~31) / 8) hBitmap = (HBITMAP)LoadImage(NULL, Path, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION); DIBSECTION dib; GetObject(hBitmap, sizeof(DIBSECTION), &dib); DWORD cbHBytes = HBYTES(dib.dsBmih.biWidth, dib.dsBmih.biBitCount);//cbhbyte : 수평바이트수 if(dib.dsBmih.biBitCount == 24) {//RGB데이터일때만 int im_Height = dib.dsBmih.biHeight; //DIB는 Y좌표가 상위로 갈수록 +. 따라서 높이 - 정상좌표가 바뀐 역방향좌표. int p = (dib.dsBmih.biWidth * (im_Height-550)) + 270; int x = p % dib.dsBmih.biWidth; int y = p / dib.dsBmih.biWidth; RGBTRIPLE* p1 = (RGBTRIPLE*)((LPBYTE)dib.dsBm.bmBits + y * cbHBytes) + x; p= p; }
DIB는 Y좌표가 상위로 갈수록 증가한다는 사실을 유의합니다.
먼저 얻어온 path에 따라서 이미지를 메모리에 로드하고, 그 핸들을 저장합니다.
그리고 핸들을 이용해서 DIBSECTION의 정보 초기화,
24비트(RGB , 8비트-255까지니까-씩.)일때만 p로 픽셀위치를 얻어오고 RGBTRIPLE을 이용해 그 RGB값을 얻어옵니다.
이를 응용해서 배열로 받아오는 함수를 작성하면,
RGB_Trip ** makeRGB(DIBSECTION dib,int * height, int * width){ *height = dib.dsBmih.biHeight; *width = dib.dsBmih.biWidth; RGB_Trip ** RGBImage = new RGB_Trip*[*height]; for(int i =0; i < *height; i++){ RGBImage[i] = new RGB_Trip[*width]; } DWORD cbHBytes = HBYTES(dib.dsBmih.biWidth, dib.dsBmih.biBitCount);//cbhbyte : 수평바이트수 if(dib.dsBmih.biBitCount == 24) {//RGB데이터일때만 int im_Height = dib.dsBmih.biHeight; //DIB는 Y좌표가 상위로 갈수록 +. 따라서 높이 - 정상좌표가 바뀐 역방향좌표. //int p = (dib.dsBmih.biWidth * (im_Height-550)) + 270; for(int i = 0; i < *height; i++){ for(int j = 0; j < *width; j++){ int p = dib.dsBmih.biWidth*(im_Height-i)+j; int x = p % dib.dsBmih.biWidth; int y = p / dib.dsBmih.biWidth; RGBTRIPLE* p1 = (RGBTRIPLE*)((LPBYTE)dib.dsBm.bmBits + y * cbHBytes) + x; RGBImage[i][j] = p1; }//j } }//if return RGBImage; }
설정
트랙백
댓글
글
Android 입문자를 위한 Tutorial - 4. 라디오 버튼
Mobile Programming/Android
2010. 10. 21. 14:51
<RadioGroup>
<RadioButton>
/>
<RadioButton>
/>
</RadioGroup>
class안이어도 메서드 밖에서는 findViewById등의 메서드의 사용이 불가함 !
만약 하단 소스에서 nameG와 imageG를 선언과동시에 FindViewById()를 호출한다면 프로그램이 맥없이 뻗는다..
아래 예제는 명화들을 출력하는 ImageView imageG 를 라디오버튼을 이용해 조작하는 간단한 프로그램.
라디오버튼 레이아웃 입력 형태를 숙지하고 확인하도록 하자.
자바 소스는 단순히 OnCheckedChanged를 오버라이드, 아이디 별로 해당 작업을 수행하기만 한다.
package geng.mm.jnu; import android.app.Activity; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.widget.ImageView; import android.widget.RadioGroup; import android.widget.TextView; public class radio extends Activity implements RadioGroup.OnCheckedChangeListener { TextView nameG; ImageView imageG; Drawable a1,a2,a3,a4,a5; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.formss); nameG = (TextView)findViewById(R.id.grimname); imageG = (ImageView)findViewById(R.id.grimpan); RadioGroup ColGroup = (RadioGroup)findViewById(R.id.grimgroup); ColGroup.setOnCheckedChangeListener(this); nameG = (TextView)findViewById(R.id.grimname); imageG = (ImageView)findViewById(R.id.grimpan); a1 = this.getResources().getDrawable(R.drawable.cgrim1); a2 = this.getResources().getDrawable(R.drawable.cgrim2); a3 = this.getResources().getDrawable(R.drawable.cgrim3); a4 = this.getResources().getDrawable(R.drawable.cgrim4); a5 = this.getResources().getDrawable(R.drawable.cgrim5); } @Override public void onCheckedChanged(RadioGroup group, int checkedId) { // TODO Auto-generated method stub switch(checkedId){ case R.id.grim11: imageG.setImageDrawable(a1); nameG.setText("모나리자"); break; case R.id.grim22: imageG.setImageDrawable(a2); nameG.setText("이삭줍는여인들"); break; case R.id.grim33: imageG.setImageDrawable(a3); nameG.setText("절규"); break; case R.id.grim44: imageG.setImageDrawable(a4); nameG.setText("아담의창조"); break; case R.id.grim55: imageG.setImageDrawable(a5); nameG.setText("별이빛나는밤에"); break; } } }
'Mobile Programming > Android' 카테고리의 다른 글
Android 입문자를 위한 Tutorial - 6. 커스텀 위젯 (0) | 2010.11.09 |
---|---|
Android 입문자를 위한 Tutorial - 5. ArrayList (0) | 2010.11.04 |
Android 입문자를 위한 Tutorial - 3. Layout (0) | 2010.09.28 |
Android 입문자를 위한 Tutorial - 2. Hello Android! (0) | 2010.09.28 |
Android 입문자를 위한 Tutorial - 1. 설치 및 환경설정 (2) | 2010.09.09 |