슬라이드 1

Similar documents
어댑터뷰

[ 그림 7-1] 프로젝트 res 폴더 이미지뷰 [ 예제 7-1] 이미지뷰 1 <LinearLayout 2 ~~~~ 중간생략 ~~~~ 3 android:orientation="vertical" > 4 <ImageView

// 화면을터치하였을때해야할작업구현 case MotionEvent.ACTION_MOVE: // 화면을드래그하였때 // 화면을드래그하였을때해야할작업구현 case MotionEvent.ACTION_UP: // 화면에서터치가사라질때 // 화면에서터치가사라질때해야할자업구현 c

[ 그림 8-1] XML 을이용한옵션메뉴설정방법 <menu> <item 항목ID" android:title=" 항목제목 "/> </menu> public boolean oncreateoptionsmenu(menu menu) { getme

13ÀåÃß°¡ºÐ

2 Application Name: Day10_yhg <LinearLayout android:layout_weight="3" > /> an

안드로이드기본 11 차시어댑터뷰 1 학습목표 어댑터뷰가무엇인지알수있다. 리스트뷰와스피너를사용하여데이터를출력할수있다. 2 확인해볼까? 3 어댑터뷰 1) 학습하기 어댑터뷰 - 1 -

( )부록

03장

9 차시고급위젯다루기 1 학습목표 날짜 / 시간과관련된위젯을배운다. 웹뷰를사용하여간단한웹브라우저기능을구현한다. 매니패스트파일의설정법을배운다. 2 확인해볼까? 3 날짜 / 시간위젯 1) 활동하기 활동개요

2) 활동하기 활동개요 활동과정 [ 예제 10-1]main.xml 1 <LinearLayout xmlns:android=" 2 xmlns:tools="

리니어레이아웃 - 2 -

학습목표 선언하여디자인을하는방법을이해하고, 실행할수있다. 시작화면을만드는방법과대체리소스를사용하는방법을이해하고실행할수있다. About 과같은상자를구현하고, 테마를적용하는법을이해하고실행할수있다.

OpenCV와 함께하는 컴퓨터 비전 프로그래밍 캠프

50_1953.pdf

슬라이드 1

쉽게 풀어쓴 C 프로그래밍

안드로이드2_14

2_안드로이드UI

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

슬라이드 1

제8장 자바 GUI 프로그래밍 II

Android Master Key Vulnerability

이것은리스트뷰의 setadapter 메소드에잘표현되어있습니다. setadapter 는리스트뷰에사용할데이터객체를넘겨주는메소드입니다. 일반적으로생각한다면 ArrayAdapter 객체를생성하여사용할데이터를저장할것이고데이터가저장된 ArrayAdapter 객체를 setadapt

PowerPoint Presentation

PowerPoint Presentation

JAVA PROGRAMMING 실습 08.다형성

PowerPoint Presentation

학습목표 메뉴를추가하는방법을이해하고실습할수있다. 프로그램의기본설정 (settings) 을정의하는방법을알고실습할수있다. 대화상자를여는방법을알고실습할수있다. 로그메시지로디버깅하는방법을이해한다. 디버거로디버깅하는방법을이해한다.

adfasdfasfdasfasfadf

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

ThisJava ..

Microsoft PowerPoint - 4주차_Android_UI구현.ppt [호환 모드]

Microsoft PowerPoint - 04-UDP Programming.ppt

Design Issues

위젯과레이아웃위젯은 View 클래스를상속해화면디스플레이와이벤트처리를할수있도록구현된스크린구성의최소단위를말한다. android.widget 패키지에는여러유형의위젯들이포함되어있다. TextView, ImageView, Button, ImageButton 등은가장간단한위젯들이

01장

PowerPoint Presentation

Microsoft PowerPoint - 2강

헬로, 안드로이드 13 주차 SQL 활용하기 (2) 강대기동서대학교컴퓨터정보공학부

제11장 프로세스와 쓰레드

PowerPoint Presentation

5장.key

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

gnu-lee-oop-kor-lec06-3-chap7

슬라이드 1

학습목표 2D 그래픽에대해배운다. Color, Paint, Canvas, Path, Drawable 클래스를배운다. 스도쿠의게임시작하기를구현하고, Game 클래스, PuzzleView 클래스를정의한다. 정의된클래스내에서보드를그리고, 숫자를그린다. 숫자입력, 힌트추가,

PowerPoint Presentation

Daum 카페

TipssoftAppActivity.java // 기본소스파일 main.xml // 배치와구성에관련된리소스파일 string.xml // 프로그램에서사용할문자열에관련된리소스파일 컴파일을하고나면 r.java 라는소스파일이하나추가되는데이파일은리소스파일을소스파일에서이용할수있도

<4D F736F F F696E74202D20C1A63233C0E520B1D7B7A1C7C820C7C1B7CEB1D7B7A1B9D628B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

쉽게 풀어쓴 C 프로그래밍

제이쿼리 (JQuery) 정의 자바스크립트함수를쉽게사용하기위해만든자바스크립트라이브러리. 웹페이지를즉석에서변경하는기능에특화된자바스크립트라이브러리. 사용법 $( 제이쿼리객체 ) 혹은 $( 엘리먼트 ) 참고 ) $() 이기호를제이쿼리래퍼라고한다. 즉, 제이쿼리를호출하는기호

Microsoft PowerPoint - ÀÚ¹Ù08Àå-1.ppt

C# Programming Guide - Types

PowerPoint 프레젠테이션

REMON Android SDK GUIDE (SDK Version 1.4.1) 1 / 25

Microsoft PowerPoint UI-Event.Notification(1.5h).pptx

(Microsoft PowerPoint - 07\300\345.ppt [\310\243\310\257 \270\360\265\345])

12 강. 문자출력 Direct3D 에서는문자를출력하기위해서 LPD3DXFONT 객체를사용한다 LPD3DXFONT 객체생성과초기화 LPD3DXFONT 객체를생성하고초기화하는함수로 D3DXCreateFont() 가있다. HRESULT D3DXCreateFont

오핀 (OFIN) SDK Guide Fintech Mobile SDK Guide - Android V 1.0 OPPFLIB 1

Microsoft PowerPoint UI-Layout.Menu.pptx

이장에서다룰내용 테두리를제어하는스타일시트 외부여백 (Margin) 과내부여백 (Padding) 관련속성 위치관련속성 2

Microsoft PowerPoint - 양정수-Android_View_and_Window_System.ppt [호환 모드]

12 주차 인텐트

PowerPoint Template

01-OOPConcepts(2).PDF

쉽게 풀어쓴 C 프로그래밍

2 단계 : 추상화 class 오리 { class 청둥오리 extends 오리 { class 물오리 extends 오리 { 청둥오리 mallardduck = new 청둥오리 (); 물오리 redheadduck = new 물오리 (); mallardduck.swim();

슬라이드 1

Microsoft PowerPoint - C++ 5 .pptx

<4D F736F F F696E74202D20C1A63236C0E520BED6C7C3B8B428B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

PowerPoint 프레젠테이션

class Sale void makelineitem(productspecification* spec, int qty) SalesLineItem* sl = new SalesLineItem(spec, qty); ; 2. 아래의액티비티다이어그램을보고 Java 또는 C ++,

17장 클래스와 메소드

Spring Boot/JDBC JdbcTemplate/CRUD 예제

(Microsoft PowerPoint - 11\300\345.ppt [\310\243\310\257 \270\360\265\345])

chap 5: Trees

(8) getpi() 함수는정적함수이므로 main() 에서호출할수있다. (9) class Circle private double radius; static final double PI= ; // PI 이름으로 로초기화된정적상수 public

쉽게 풀어쓴 C 프로그래밍

자바GUI실전프로그래밍2_장대원.PDF

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

Microsoft PowerPoint - web-part01-ch10-문서객체모델.pptx

C++ Programming

Network Programming

09-interface.key

헬로, 안드로이드 7 주차 멀티미디어 강대기동서대학교컴퓨터정보공학부

<4D F736F F F696E74202D205BC3D6C1BE5D3133C1D6C2F720B8AEBDBAC6AEBAE420B0ADC0C7C0DAB7E12D >

INAPP결제 API 가이드

UI TASK & KEY EVENT

Microsoft PowerPoint - 09-Object Oriented Programming-3.pptx

PowerPoint Presentation

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - chap10-함수의활용.pptx

설계란 무엇인가?

PowerPoint Presentation

JAVA PROGRAMMING 실습 05. 객체의 활용

PowerPoint Presentation

슬라이드 1

Transcription:

13 장. 커스텀뷰개발

API 에서제공하는뷰를그대로이용하면서약간변형시킨뷰 여러뷰를합쳐서한번에출력하기위한뷰 기존 API 에전혀존재하지않는뷰 public class MyView extends TextView { public class MyView extends ViewGroup { public class MyView extends View {

커스텀뷰를레이아웃 XML 에등록해서이용하려면생성자 3 개를모두정의 public class MyView extends View { Context context; public MyView(Context context) { super(context); public MyView(Context context, AttributeSet attrs) { super(context, attrs); public MyView(Context context, AttributeSet attrs, int defstyleattr) { super(context, attrs, defstyleattr); ondraw( ) 함수 이함수에서그린내용이뷰영역에출력

protected void ondraw(canvas canvas) { canvas.drawcolor(color.alpha(color.cyan)); RectF rect = new RectF(15, 15, 160, 160); Paint paint = new Paint(); paint.setantialias(true); paint.setcolor(color.red); canvas.drawarc(rect, 0, 360, false, paint); 커스텀뷰를레이아웃 XML 에등록할때는클래스명만등록하면안되고, 전체패키지명으로등록 <com.example.test4_13.myview android:layout_width="wrap_content" android:layout_height="wrap_content" /> 커스텀속성이용 res/values 폴더하위에 attrs.xml 파일을이용하며, <declare-styleable> 태그로속성을등록 <resources> <declare-styleable name="myview"> <attr name="customcolor" format="color"/> </declare-styleable> </resources>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:custom="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <com.example.test4_13.myview android:layout_width="wrap_content" android:layout_height="wrap_content" custom:customcolor="#0000ff" /> </RelativeLayout> AttributeSet 을이용하여속성값을추출 public MyView(Context context, AttributeSet attrs) { super(context, attrs); this.context=context; if(attrs!= null){ TypedArray a = context.obtainstyledattributes(attrs, R.styleable.MyView); color=a.getcolor(r.styleable.myview_customcolor, Color.RED);

속성값을획득하는함수 int getattributecount(): 속성개수 String getattributename(int index): 속성명획득 String getattributevalue(int index): 속성값획득 int getattributeintvalue(int index, int defaultvalue): 속성값획득 boolean getattributebooleanvalue(int index, boolean defaultvalue): 속성값획득 float getattributefloatvalue(int index, float defaultvalue): 속성값획득 for (int i=0;i<attrs.getattributecount();i++) { attributes[i]=attrs.getattributename(i)+"="+attrs.getattributevalue(i);

크기결정 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:custom="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <com.example.test4_13.myview android:id="@+id/myview" android:layout_width="wrap_content" android:layout_height="wrap_content" custom:customcolor="#0000ff" android:background="#ff0000" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="world"/> </LinearLayout> 뷰내부에서크기결정을위해 onmeasure( ) 함수를이용 protected void onmeasure(int widthmeasurespec, int heightmeasurespec) { super.onmeasure(widthmeasurespec, heightmeasurespec); setmeasureddimension(500, 500);

레이아웃 XML 파일의크기설정정보는 onmeasure( ) 함수의매개변수로전달 protected void onmeasure(int widthmeasurespec, int heightmeasurespec) { int widthmode = MeasureSpec.getMode(widthMeasureSpec); int widthsize = MeasureSpec.getSize(widthMeasureSpec); int heightmode = MeasureSpec.getMode(heightMeasureSpec); int heightsize = MeasureSpec.getSize(heightMeasureSpec); //... MeasureSpec.AT_MOST: 뷰내부에서지정하라는의미. 레이아웃 XML 에서 wrap_content 로선언한경우 MeasureSpec.EXACTLY: 뷰를이용하는액티비티쪽에서크기를결정한경우. 레이아웃 XML 에서 fill_parent, match_parent, 100px 등으로선언한경우 MeasureSpec.UNSPECIFIED: 모드가설정되지않았을경우

이벤트추가 public interface OnMyChangeListener { void onchange(int value); 뷰내부에 setonmychangelistener( ) 함수를호출하여객체를등록 public class MyPlusMinusView extends View { //... //Observer 를등록하기위한객체 ArrayList<OnMyChangeListener> listeners; //Observer 등록을위한함수 public void setonmychangelistener(onmychangelistener listener){ listeners.add(listener);

뷰에서이벤트를처리하기위한함수를재정의 public boolean ontouchevent(motionevent event) { //... // 데이터변경 value++; // 화면갱신 invalidate(); for(onmychangelistener listener : listeners){ //observer 에데이터전달 listener.onchange(value); //...

커스텀뷰를이용하는액티비티의코드 public class MainActivity extends AppCompatActivity implements OnMyChangeListener{ @Override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); MyPlusMinusView plusminusview= (MyPlusMinusView)findViewById(R.id.customView); // 인터페이스를구현한객체를 View 에등록 plusminusview.setonmychangelistener(this); @Override public void onchange(int value) { //...

Step by Step 13-1 Custom View Custom View 를이용하는실습 플러스, 마이너스아이콘으로숫자데이터를발생데이터를 Activity 에전달해서이용하게하는 Custom View 1. Module 생성 2. 파일복사 3. attrs.xml 생성 4. OnMyChangeListener 인터페이스생성 5. MyPlusMinusView 작성 6. activity_main.xml 작성 7. MainActivity 추가 8. 실행

13.2 그래픽프로그램 13.2.1. 뷰를그리는방법 Canvas: 그래픽함수를제공해주는클래스. 이클래스의함수를이용하여뷰의화면을그림 Paint: 그리기옵션지정. 색상, 투명도등의속성을지정 protected void ondraw(canvas canvas) { Paint paint=new Paint(); paint.setcolor(color.red); canvas.drawcircle(50, 50, 50, paint); drawpoint(float x, float y, Paint paint): 점을하나찍는함수. drawline(float startx, float starty, float stopx, float stopy, Paint paint): 선을그리는함수. drawrect(float left, float top, float right, float bottom, Paint paint): 사각형을그리는함수. drawrect(rectf rect, Paint paint): 사각형을그리는함수. drawcircle(float cx, float cy, float radius, Paint paint): 원을그리는함수. 원점에대한 x, y 좌푯값과원의반경정보로원을그림

13.2 그래픽프로그램 drawarc(rectf oval, float startangle, float sweepangle, boolean usecenter, Paint paint): 아크 (Arc) 를그리는함수. drawtext(string text, float x, float y, Paint paint): 문자열을지정된좌표에그리는함수 drawbitmap(bitmap bitmap, float left, float top, Paint paint): 이미지를지정된위치에그리는함수 drawroundrect(rectf rect, float rx, float ry, Paint paint): 모서리가둥근사각형을그리는함수 drawoval(rectf oval, Paint paint): 타원을그리는함수 Paint paint=new Paint(); paint.setcolor(color.red); paint.setstrokewidth(10); canvas.drawline(100, 10, 100, 210, paint); canvas.drawline(10, 110, 210, 110, paint); paint.setstyle(paint.style.stroke); RectF rect=new RectF(300, 10, 400, 200); canvas.drawrect(rect, paint);

13.2 그래픽프로그램 paint.setstyle(paint.style.stroke); RectF arcrect=new RectF(10, 10, 300, 300); canvas.drawarc(arcrect, 0, 90, true, paint); canvas.drawarc(arcrect, -90, -90, false, paint); RectF roundrect=new RectF(10,10,300,300); canvas.drawroundrect(roundrect, 20, 40, paint); RectF ovalrect=new RectF(10,350,300,500); canvas.drawoval(ovalrect, paint); 뷰의영역전체를지정된색으로칠하는함수 drawrgb(int r, int g, int b) drawcolor(int color) drawpaint(paint paint)

13.2 그래픽프로그램 13.2.2. Paint 클래스 그리기효과를지정하기위한클래스 setcolor(int color) setargb(int a, int r, int g, int b) setantialias(boolean aa) setstyle(paint.style style) setstrokewidth(float width) setstrokecap(paint.cap cap) setstrokejoin(paint.join join) paint.setstyle(paint.style.stroke); paint.setstrokewidth(30); canvas.drawline(10, 20, 200, 20, paint); paint.setstrokecap(paint.cap.round); canvas.drawline(10, 60, 200, 60, paint); paint.setstrokecap(paint.cap.square); canvas.drawline(10, 100, 200, 100, paint);

13.2 그래픽프로그램 13.2.3. 코드에서논리적크기획득 자바코드에서개발자가직접크기를명시할때는논리적단위를사용할수없으며, 오직픽셀단위로만적용 Paint paint=new Paint(); paint.setcolor(color.red); paint.setstyle(paint.style.stroke); paint.setstrokewidth(30); Rect rect=new Rect(10, 10, 540, 300); canvas.drawrect(rect,paint); DisplayMetrics 객체를이용해서스마트폰의크기정보를획득한다음, 자바코드에서스마트폰크기호환성을고려한크기계산

13.2 그래픽프로그램 DisplayMetrics dm=getresources().getdisplaymetrics(); float strokewidth=15*dm.density; int rectwidth=(int)(150*dm.density); int rectheight=(int)(150*dm.density); int position=(int)(10*dm.density); Paint paint=new Paint(); paint.setcolor(color.red); paint.setstyle(paint.style.stroke); paint.setstrokewidth(strokewidth); Rect rect=new Rect(position, position, rectwidth, rectheight); canvas.drawrect(rect,paint); 크기를리소스로등록하여이용하는방법 <dimen name="strokewidth">15dp</dimen> <dimen name="size">150dp</dimen> <dimen name="position">10dp</dimen> int size = context.getresources().getdimensionpixelsize(r.dimen.size); int strokewidth= context.getresources().getdimensionpixelsize(r.dimen.strokewidth); int position= context.getresources().getdimensionpixelsize(r.dimen.position);