System.out.println("Hello, World");

public class SoundExampleView extends View{
 SoundPool m_SoundPool;
 int m_Sound_id_1;
 int m_Sound_id_2;
 
 MediaPlayer m_Sound_Background;//배경음악
 MediaPlayer m_sound_1;
 MediaPlayer m_sound_2;
 public SoundExampleView(Context context){
  super(context);
  m_SoundPool = new SoundPool(5,AudioManager.STREAM_MUSIC,0);
  m_Sound_Background = MediaPlayer.create(context, R.raw.background2);
  m_sound_1 = MediaPlayer.create(context, R.raw.effect1);
  m_sound_2 = MediaPlayer.create(context, R.raw.effect2);
  m_Sound_Background.start();
  m_Sound_id_1 = m_SoundPool.load(context, R.raw.effect1,1);
  m_Sound_id_2 = m_SoundPool.load(context, R.raw.effect2,2);
  m_Sound_Background.start();
  setFocusable(true);
  
 }
 
 public boolean onKeyDown(int keyCode, KeyEvent event){
  if(keyCode == KeyEvent.KEYCODE_DPAD_LEFT)
   //m_sound_1.start();
   m_SoundPool.play(m_Sound_id_1, 1, 1, 0, 0, 1);
  
  if(keyCode == KeyEvent.KEYCODE_DPAD_RIGHT)
   //m_sound_2.start();
   m_SoundPool.play(m_Sound_id_2, 1, 1, 0, 0, 1);
  if(keyCode == KeyEvent.KEYCODE_SPACE){
   if(m_Sound_Background.isPlaying())
   m_Sound_Background.pause();
   else
    m_Sound_Background.start();
   //화면을 갱신시켜준다.
   invalidate();
  }
 
  
  return super.onKeyDown(keyCode, event);
 }
 
 
 protected void onDraw(Canvas canvas){
  Paint p = new Paint();
  p.setTextSize(20);
  p.setColor(Color.WHITE);
  String str;
  //isPlaying 메서드를 통해 현재 상태를 얻어옵니다.
  if(m_Sound_Background.isPlaying())
   str="재생중";
  else
   str = "일시 정지줗ㅇ";
  canvas.drawText("배경음악 : "+ str, 0, 20,p);
   
 }
  
 }

 

 

 

public class SoundExample extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(new SoundExampleView(this));
    }
}

 

Posted by 김마농
id

뷰를 칭하는 고유한 이름을 정의한다. 코드나 XML 문서에서 이 뷰를 참조할때 id를 사용하므로 의미를 잘 설명할 수 있는 직관적인 이름을 붙인다. XML 문서에 id를 지정해 놓으면 이 이름이 R.java에 정수 상수로 정의된다. 코드에서 이 뷰를 참조할 때는 findViewById라는 메서드를 호출하며 인수로 참조할 뷰의 id를 전달한다.


layout_width, layout_height


위젯은 보통 부모의 크기를 가득 채우거나 아니면 자신의 내용물 크기에 맞추거나 둘 중 하나의 방식으로 배치된다. 예를 들어 "start"라는 캡션을 가지는 버튼을 배치할때 수평, 수직 각 방향에 대해 어떤 크기를 지정하는가에 따라 버튼의 크기가 달라진다.


Posted by 김마농

방향 설정

 - LinearLayout은 차일드 뷰를 일렬로 배치하는 레이아웃이다. XML 문서에 나타나는 순서대로 뷰가 차곡 차곡 배치된다. 별도의 지정이 없는 한 뷰 사이의 공백은 없으며 다닥 다닥 붙어서 배치된다. 가장 단순해 보이지만 직관적이어서 사용 빈도가 높다. 또한 응용의 묘미가 있어서 활용도가 높으며, 리이너 몇개만 조합해도 왠만한 화면 모양은 거의 만들 수 있다.


 리니어의 가장 중요한 속성은 뷰의 배치 방향을 결정하는 orentation이다. 차일드를 일렬로 배치하는 방법은 수평, 수직 두 가지가 있다. vertical은 차일드를 위에서 아래로 수직으로 배열하고, horizontal은 차일드를 왼쪽에서 오른쪽으로 수평배열한다. 이 속성을 별도로 지정하지 않을때는 dafault인 수평으로 적용된다.


 리니어 레이아웃을 적용시키기 위해서는 android:orientatin="horizontal"을 적용시키면 된다.


 만약 텍스트의 속성이에서 android:layout_width="fill_parent"로 지정해놓으면 부모의 폭 전체를 모두 차지해버리기 때문에 나머지 텍스트들은 보이지가 않는다. 그리하여 fill_parent를 android:layout_width="wrap_content"로 바꿔야 한다.


 바꾼후 실행해보면 각 문자열이 자신의 폭만큼만 차지하여 나란히 배열될 것이다. 수평으로 배치할려면 차일드가 꼭 필요한만큼의 폭만 사용해야 한다. 단 화면 폭이 좁아 마지막 문자열은 자동 개행되어 표시된다. 만약 앞쪽 두 문자열이 레이아웃의 폭을 다 써버렸다면 마지막 문자열은 화면 밖으로 밀려나 보이지 않을 것이다.


리니어는 무조건 차일드를 일렬로 배치하기만 할 뿐 자동 개행기능은 제공하지 않는다. 위쪽에서 자동 개행되는 것은 텍스트 뷰의 기능이지 리니어의 기능이 아니다. 


정렬 지정

뷰의 영역이 충분히 크면 상하좌우에 넓은 여백이 생긴다. 하지만 뷰가 커진다고 해서 내용물도 같이 커지는게 아니기 때문에 어느족에 배치할 것인지의 문제가 생긴다. 내용물을 뷰의 어느쪽에 배치할 것인가는 gravity 속성으로 지정한다. 수평, 수직 방향에 대해 정렬 방식을 각각 지정할 수 있으며 | 연산자로 두 개의 속성을 묶어서 지정할 수 있다.





Posted by 김마농

안드로이드 - Button과 EditText


Button

- 사용자가 클릭하여 명령을 내릴수 있는 위젯이며 대부분의 운영체제나 장비에서 아주 흔하게 사용된다. 

  사각형 모양이며 표면에 명령의 의미를 설명하는 문자열이 표시도어 있다. 클래스명이 Button이므로 XML 엘리멘트 이름도 당연히 Button이다. 

  속성은 대부분 View나 TextView로부터 상속받은 것이며 고유의 속성을 따로 가지지 않는다.


EditText

- 문자열을 입력받는 위젯이며 간단히 줄여 에디트라고 부른다. TextView의 서브 클래스이므로 TextView의 모든 속성을 사용할 수 있으며 추가

  문자열 편집과 관련된 메서드가 제공한다.


예제)

<EditText

android:id="@+id/edit"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="여기다 입력"

/>

<Button

android:id="@+id/btn"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="입력 완료"

/>


<후보단어 보여주는 이벤트 처리코드>

Button btn = (Button)findViewById(R.id.버튼의 ID);

btn.setOnClickListener(new Button.OnClickListener(){

public void onClick(View v){

//클릭했을때의 동작 처리

EditText edit=(EditText)findViewById(R.id.edit);

String str = edit.getText().toString();

Toast.makeText(C03_ButtonEdit.this, str, Toast.LENGTH_SHORT).show();

}

});

}

}

}

});



Posted by 김마농

안드로이드 -ImageView


○ src

 - 출력한 이미지를 지정하는 가장 중요한 속성. 이 속성에 값을 대입하지 않으면 아무것도 보이지 않으므로 반드시 지정해야 한다.

ex) android:src="@drawble/파일명" 

    android:src="@drawble/pride"


○ maxHeight, maxWidth

 - 이미지가 출력될 최대 크기를 지정한다. 별다른 지정이 없으면 이미지의 원래 크기대로 출력되지만 모바일 장비의 해상도가 충분치 않으므로 적당히                                                              제한할 필요가 있다.

ex) android:maxHeight="크기", android:maxWidth="크기"

android:maxHeight="70px", android:maxWidth="120px"


○ adjustViewBounds

 - 이미지의 종횡비를 맞추기 위해 이미지 뷰의 크기를 적당히 조정할 것인가를 지정한다. true or false 둘중 하나의 값만 지정가능하므로 하나만 사용해야 한다.

ex) android:adjustViewBounds="true", android:adjustViewBounds="false"


○ cropToPadding

 - true일 경우 위젯의 주어진 여백에 맞추기 위해 이미지의 일부를 잘라낸다. 이 속성을 사용하면 여백을 강제로 유지하므로 이미지 전체가 다 보이지 않을 수도 있다.


○ tint

 - 이미지에 색조를 입힌다. 색상이 이미지 위에 살짝 덮혀 출력된다. 통상 반투명한 색상을 지정하여 이미지 위에 옅은 색상을 뿌리는 효과를 낸다.

ex) android:tint="#80ff000"


○ scaleType

 - 이미지의 원래 크기와 다르게 출력 할 때 적용할 확대, 축소 방식을 지정한다. matrix, fitXY, center, centerCrop, centerInside 등의 여러 가지 방법 중 하나를 지정한다.


예제)

<ImageView

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:src="@drawable/pride"

/>


<ImageView

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:src="@drawable/pride"

android:maxHeight="70px"

android:maxWidth="120px"

android:adjustViewBounds="true"

/>


<ImageVIew

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:src="@drawable/dog"

android:tint="#80ff0000"

/>


Posted by 김마농

<구현완료>

구현은 완료되었지만 아직 교재 그대로 보고 코딩한 수준이기에 소스를 완벽히 다 이해하지 못했다. 몇번 계속 짝맞추기 게임을 만들면서 소스를 이해해야겠다.



Posted by 김마농
카드 뒷면과 3장의 카드들



카드게임을 시작하게 되면 카드는 모두 뒤집은 상태에서 시작하게 된다. 그리하여 뒤집힌 카드를 먼저 구현하기로 한다.

아까와 똑같이 카드뒷면을 변수로 추가해주고, 이미지 정보를 불러온다.


public class CardKingView extends View {

Bitmap m_BackGroundImage;

Bitmap m_Card_BackSide;


public CardKingView(Context context) {

super(context);

m_BackGroundImage = BitmapFactory.decodeResource(getResources(),R.drawable.background,null); m_Card_BackSide = BitmapFactory.decodeResource(getResources(), R.drawable.backside,null);

}

public void onDraw(Canvas canvas)

{

canvas.drawBitmap(m_BackGroundImage, 0,0,null);

}

}

이제 카드 이미지를 4x3으로 깔도록 한다. 

public void onDraw(Canvas canvas)

{

canvas.drawBitmap(m_BackGroundImage, 0,0,null);

for(int y=0; y<2; y++){

for(int x=0; x<3; x++)

{

canvas.drawBitmap(m_Card_BackSide, 60+x*120, 280+y*170,null);

}

}

}



만약 카드 이미지를 띄웠는데 해상도가 맞지않아 카드들이 서로 겹치게 출력된다면 60+x*120, 280+y*170
이부분에 있는 수식들을 조금씩 바꿔가면서 위치를 맞추도록 한다.

뒤집한 카드의 위치 표 

 Y값 X값 m_Card_BackSide를 그리는 위치 
0 (60+X*12, 280+Y*160) = (60 , 280) 
0 1 (60+X*12, 280+Y*160) = (72 , 280)    
0 2 (60+X*12, 280+Y*160) = (84 , 280) 
 1  0 (60+X*12, 280+Y*160) = (60 , 440) 
 1  1 (60+X*12, 280+Y*160) = (72 , 440) 
 1  2 (60+X*12, 280+Y*160) = (84 , 440)   

 

Posted by 김마농
맨처음 했던 이미지 띄우기와 달리 클래스에 배경화면으로 사용할 Bitmap을 멤버변수로 추가하여
이미지를 출력하기로 한다.
 멤머변수를 추가했으면 생성자에 리소스를그려줄 배경화면을 가져와서 멤버변수에 넣어주는 작업을 해준다.

public class CardKingView extends View {
Bitmap m_BackGroundImage; // 멤버변수로 선언해줌

public CardKingView(Context context) {
super(context);
m_BackGroundImage=
BitmapFactory.decodeResource(getResources(),R.drawable.background,null);  
//여기서 background는 이미지 파일명이니까 중요함
}
public void onDraw(Canvas canvas)
{
canvas.drawBitmap(m_BackGroundImage, 0,0,null);
}

 

public class CardCard extends Activity {
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(new CardKingView(this));
    }
}

모두 완료했으면 실행해서 배경이미지가 제대로 출력되는지 확인한다.

 

Posted by 김마농
우선 안드로이드 프로젝트를 생성한다.
- 프로젝트가 생성되었으면 src/패키지명/프로젝트명.java 파일이 존재하는걸 확인한다. 

화면의 단위 View
-안드로이드 애플리케이션을 구성하는 주요 단위는 엑티비티이다. 하지만 엑티비티 자체는 화면에 표시되지 않고 엑티비티 안에 뷰라는 것이 실제로 화면에 보이는 것이다. 뷰는 안드로이드의 UI를 구성하는 핵심 요소로서 보통 애플리케이션을 제작할 떄 이것에 대한 파생 클래스만으로도 제작이 가능할 정도로 방대한 양의 파생 클래스를 지원한다.

화면에 이미지를 띄우기 위해서 View클래스를 상속받는 새 클래스를 생성한다.
상속받는 View 클래스는 android.view.view다. 
ImageView클래스를 생성했으면 아래와 같이 입력해주자

public class ImageView extends View {
public EaxmpleView(Context context) {
super(context);
}
public void onDraw(Canvas canvas){
Bitmap _android = BitmapFactory.decodeResource(getResources(), R.drawable.android,null);
canvas.drawBitmap(_android,0,0,null);
}
}
 
이렇게 생성한후  실행하게 되면 이미지가 출력이 되지 않고 Hello Word나 출력이 된다. ImageView클래스를 만들어서 그림을 불러오고 그림을 그렸지만 정작 ImageView 클래스르 실제로 생성해서 사용한적은 없다. 그래서 엑티비티쪽에 ImageView클래스를 추가하는 과정이 필요하다.

public class ExampleImage extends Activity {
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(new  ImageView(this));
    }
 

Posted by 김마농