반응형
Notice
Recent Posts
Recent Comments
«   2024/05   »
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 31
Archives
Today
Total
관리 메뉴

Do Something IT

움직이는 네모 본문

Android

움직이는 네모

아낙시만더 2010. 6. 21. 14:14
반응형


저번 퍼즐 마추기에 이어 이번에는 움직이는 네모를 배워 보았다. 아직 자바와 안드로이드 API를 잘 모르기 때문에 다시 한번 어려움을 많이 느겼다. 이번에 만들어본 프로젝트는 일단 네모를 그리는 클래스를 생성후 그 객체를 통하여 네모를 그리고 액티비티 탬플릿에서 컴트롤을 이용하여 이동시켰다.


보는 바와 같이 위에 달려있는 버튼 4개를 이용하여, 좌우상하를 이용하는 빨간 네모를 만들었다.
소스는 아래와 같다.

--[[main.xml]]--

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
 android:id="@+id/lo"
    >
<LinearLayout android:id="@+id/llo01" android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content">
<Button android:id="@+id/Bleft" android:layout_width="70px" android:layout_height="wrap_content" android:text="left"/>
<Button android:id="@+id/Bright" android:layout_width="70px" android:layout_height="wrap_content" android:text="right"/>
<Button android:id="@+id/Bup" android:layout_width="70px" android:layout_height="wrap_content" android:text="up"/>
<Button android:id="@+id/Bdown" android:layout_width="70px" android:layout_height="wrap_content" android:text="down"/>
</LinearLayout>
<AbsoluteLayout android:id="@+id/Al" android:layout_width="wrap_content" android:layout_height="wrap_content"></AbsoluteLayout>
</LinearLayout>

--[[네모 박스 Box.java]]--

package my.android;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.drawable.ShapeDrawable;
import android.graphics.drawable.shapes.OvalShape;

import android.util.AttributeSet;
import android.view.View;

public class myRect extends View {// 새로운 뷰작업을 하기위해서는  클래스 생성시
          //java.view.View로 서브클래스 를 지정하여야한다.
          //#컴포넌트 작업시 뷰로 작업한다.
 public myRect(Context context) {//생성자 해당 객체의 레퍼런스를 상위클래스에 기억시킨다.
  super(context);
  //색을  저장하는 페인트 객체
  _drawable= new ShapeDrawable(new OvalShape());//shapeDrawable의 안에 Ovalshape();주소를 참고시킨다.
  _drawable.getPaint().setColor(0xffFF0000);   //Ovalshap는 더많은 기능을 가능하게 해준다.
 }
 
 public myRect(Context context, AttributeSet attrs, int defStyle) {
  super(context, attrs, defStyle);
 }
 //그림을 그리는 작업을 하는 onDraw 메소드 이를 그리기위해서 Canvas가 필요하다. canvas에 그림
 protected void onDraw(Canvas canvas){//OnDraw는 View클래스에 오버라이딩 되어있으며
  canvas.drawRect(_X,_Y,_X+_Width,_Y+_Hight,_drawable.getPaint());//이는 해당 객체 생성시 실행된다.
 }
 
 public void MoveLeft(int Distance){
    _X = _X-Distance;
    invalidate();//onDraw()메소드를 실행시킨다.
 }
 
 public void MoveRight(int Distance){
    _X = _X+Distance;
    invalidate();
 }
 public void MoveUp(int Distance){
    _Y = _Y-Distance;
    invalidate();
 }
 public void MoveDown(int Distance){
    _Y = _Y+Distance;
    invalidate();
 }
 
 private ShapeDrawable _drawable;   
 private int _X=0;
 private int _Y=0;
 private int _Width=32;
 private int _Hight=32;
}

--[]액티비티 클래스 myRect.java[]--

package my.android;

import javax.security.auth.PrivateCredentialPermission;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AbsoluteLayout;
import android.widget.Button;
import android.widget.LinearLayout;

public class andTest extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);      
             
        Rect= new myRect(this);
        ((AbsoluteLayout)findViewById(R.id.Al)).addView(Rect);//레이아웃 뷰에 Rect 뷰를 더하라.
        ((Button)findViewById(R.id.Bleft)).setOnClickListener(On_lClick);
        ((Button)findViewById(R.id.Bright)).setOnClickListener(On_rClick);
        ((Button)findViewById(R.id.Bup)).setOnClickListener(On_uClick);
        ((Button)findViewById(R.id.Bdown)).setOnClickListener(On_dClick);
       
    }
   
    private myRect Rect;
    private View.OnClickListener On_lClick =new View.OnClickListener(){
  public void onClick(View v) {
  Rect.MoveLeft(5);
  }     
    };
     
    private View.OnClickListener On_rClick =new View.OnClickListener(){
  public void onClick(View v) {
   Rect.MoveRight(5);
  }     
    };
    private View.OnClickListener On_uClick = new View.OnClickListener(){
  public void onClick(View v) {
   Rect.MoveUp(5);
  }      
    };
    private View.OnClickListener On_dClick = new View.OnClickListener(){
  public void onClick(View v) {
   Rect.MoveDown(5);
  }      
    };
}

안드로이드 아직가지는 여타 프로그래밍과 다를 바가 별로 없는것 같다. 재미도 있고 아직까지는 할만하다.
재미있는 어플을 만들때까지 더욱더 갈고 닦아야 겠다.

반응형

'Android' 카테고리의 다른 글

[Android] Adapter  (0) 2010.06.25
[번역] 안드로이드 Drawable Mutations  (0) 2010.06.24
기념일자 찾기  (0) 2010.06.17
안드로이드 애플리케이션 구성요소  (0) 2010.06.08
안드로이드 구조  (0) 2010.06.08
Comments