봉봉의 개인 블로그
2017-06-15-P 본문
5) 안드로이드 앱 화면을 구성하는 요소(뷰) |
6) 액티비티에 글자 출력하기 1. Toast만들어서 글자 출력하기 MainActivty파일을 선택 후 Toast출력 관련 코드(14라인)를 추가한다. onCreate()메서드는 액티비티가 실행될때 호출되는 메서드이다. 12라인에서 화면 뷰를 가지고 와서 설정 후 14라인에 Hello라는 문자열을 가진 토스트를 하나 만들어 보여준다. 12라인의 매개변수 R.layout.activity_main 은 res폴더 아래 layout폴더 아래 activity_main.xml파일을 가르킨다.
|
7) 액티비티에 버턴 추가 후 버턴 클릭 이벤트 처리하기
1. firstapp프로젝트에서 TextView를 삭제하고 팔레트에서 Button을 하나 추가 후 버턴의 ID값을 "helloBtn"이라고 한다.
[출처] 7) 액티비티에
3. 클릭 이벤트를 다른 방법으로 구현도 가능하다.
익명클래스를 사용
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <?xml version="1.0" encoding="utf-8"?> xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="jjdev.cafe.chapter21.MainActivity"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="EventTest" android:id="@+id/button" android:layout_centerVertical="true" android:layout_centerHorizontal="true" /> </RelativeLayout> | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | package jjdev.cafe.chapter21; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.Toast; public class MainActivity extends AppCompatActivity { Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button = (Button)findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View view) { Toast.makeText(MainActivity.this, "EventTest Click", Toast.LENGTH_SHORT).show(); } }); } } | cs |
이베트 리스너를 구현하여 이벤트 처리하기
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <?xml version="1.0" encoding="utf-8"?> xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="jjdev.cafe.chapter21.MainActivity"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="EventTest" android:id="@+id/button" android:layout_centerVertical="true" android:layout_centerHorizontal="true" /> </RelativeLayout> | cs |
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 | package jjdev.cafe.chapter21; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.Toast; public class MainActivity extends AppCompatActivity { Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button = (Button)findViewById(R.id.button); button.setOnClickListener(new MyListener()); } class MyListener implements View.OnClickListener { @Override public void onClick(View view) { Toast.makeText(MainActivity.this, "EventTest Click", Toast.LENGTH_SHORT).show(); } } } | cs |
액티비티 스스로 이벤트 리스너를 구현
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <?xml version="1.0" encoding="utf-8"?> xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="jjdev.cafe.chapter21.MainActivity"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="EventTest" android:id="@+id/button" android:layout_centerVertical="true" android:layout_centerHorizontal="true" /> </RelativeLayout> | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | package jjdev.cafe.chapter21; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.Toast; public class MainActivity extends AppCompatActivity implements View.OnClickListener{ Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button = (Button)findViewById(R.id.button); button.setOnClickListener(this); } @Override public void onClick(View view) { Toast.makeText(this, "EventTest Click",Toast.LENGTH_SHORT).show(); } } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <?xml version="1.0" encoding="utf-8"?> xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="jjdev.cafe.chapter21.MainActivity"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="EventTest" android:id="@+id/button" android:layout_centerVertical="true" android:layout_centerHorizontal="true" android:onClick="testOnClick"/> </RelativeLayout> | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | package jjdev.cafe.chapter21; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Toast; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void testOnClick(View view) { Toast.makeText(this,"EventTest Click",Toast.LENGTH_SHORT).show(); } } | cs |
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 32 33 34 | package com.example.firstapp.firstapp; import android.app.Activity; import android.os.Bundle; import android.widget.SeekBar; import android.widget.TextView; public class MainActivity extends Activity{ private TextView volumeText; private SeekBar volumeBar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); volumeText = (TextView)findViewById(R.id.volumeText); volumeBar = (SeekBar)findViewById(R.id.volumeBar); volumeBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { // 시크바에 변화가 있을대 마다 호출 되는 (콜백)메서드 @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { volumeText.setText("volume : "+progress); } // 시크바를 움직이려고 터치시 호출되는 (콜백)메서드 @Override public void onStartTrackingTouch(SeekBar seekBar) {} // 시크바를 움직임을 멈출때 호출되는 (콜백)메서드 @Override public void onStopTrackingTouch(SeekBar seekBar) {} }); } } | cs |
Seekbar 이벤트 처리 예제
이런 예제를 만들어 보겠다.
먼저
이런식으로 화면을 만들어줍니다.
그다음
이런식으로 java 쪽 즉 MainActivity 의 내용을 채워줍니다.
설명을 조금 하자면 먼저 2~9까지는 import에 관한 내용이다.
그후 11~17번까지와 같이 사용하려는 변수들 즉 아까 화면에서 만든 seekbar 라던지 Textview 들을 가지고 와서 담을수 잇는 변수를 만들어 줍니다. 앞에 private 가 붙으면 더좋음
그후 21번줄에서 화면을 불러옵니다.
다음으로 22~ 28번 줄까지 불러온 화면에서 TextView 에 관련된 값들을 찾아서 변수 안에 담아줍니다 Seekbar 도 마찬가지 입니다.
그후 int 타입으로 변수들을 선언해 줍니다 30~33번째 출까지 그후 seek의 값들을 get 하는 getprogress를 통해서 int 값을 채워줍니다 그후 33번줄에서와 같이 Color.rgb 를 이용해 색을 표현하기 위한 (255,255,255) 이런값들을 채워주게 만들어줍니다 그후 resulttext 의 백그라운드 색을 Color.rgb를 이용해 만든 색으로 변경해주게끔 만들어줍니다.
그후 redsekk 에 대한 이벤트를 만들어줍니다 36~54번째 줄까지 만들어 줍니다 red 만 간략하게 설명 하자면
먼저 36번줄을 보면 redseek 안에 setOnSeekBarChangeListener 메서드를 통해 이벤트를 셋해줍니다
그 이벤트의 내용은 SeekBar 안에 OnSeekBarChangeListener 로 새롭게 만든 객체이다 이 객체는 인터페이스객체 라고 생각하면 편하다 그렇게 때문에 Override 해서 사용하여야한다 38~45번줄까지는 값이 바뀔때이다 즉 SeekBar 의bar 를 움직일때 의 메서드이고 47~49 까지는 bar를 움직이기 위해서 터치하였을때이다.
그다음 51~53 까지는 bar를 움직이고 터치를 땟을때 나오는 이벤트이다.
터치 이벤트 처리 예제 만들기
먼저 프로젝츠를 새로 만들어줍니다. 그후
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | package com.example.touchapp; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.MotionEvent; import android.view.View; import android.widget.TextView; public class MainActivity extends AppCompatActivity { private TextView resultView; private float downX; private float upX; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); resultView = (TextView)findViewById(R.id.resultView); resultView.setOnTouchListener(new TextView.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch(event.getAction()) { // 화면에 터치시 x좌표값을 받는다 case MotionEvent.ACTION_DOWN: downX = event.getX(); break; // 화면에서 터치가 끝날때 x좌표값을 받아서 // 터치시 좌표와 비교 후 증가인지 감소 인지 분기 시킨다 // -10, +10은 너무 작은 값에는 반응하지 않도록 case MotionEvent.ACTION_UP: upX = event.getX(); if(upX < downX-10) { int resultValue = Integer.parseInt(resultView.getText().toString()); resultView.setText(--resultValue+""); } else if(upX > downX+10) { int resultValue = Integer.parseInt(resultView.getText().toString()); resultView.setText(++resultValue + ""); } break; } return true; // 터치 이벤트의 특성상 다른 이벤트와 중복될때 먼저 진행되는데 // true를 리턴하면 이벤트를 소멸시키면서 다음 이벤트로 진행되지 않는다. } }); } } | cs |
뷰 단일 터치 이벤트 구현하기
레이아웃 파일
1 2 3 4 5 6 7 8 9 10 11 12 | <?xml version="1.0" encoding="utf-8"?> xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="jjdev.cafe.chapter23.MainActivity" android:id="@+id/layout"> </RelativeLayout> | cs |
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 32 33 34 35 | package jjdev.cafe.chapter23; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.MotionEvent; import android.view.View; import android.widget.RelativeLayout; public class MainActivity extends AppCompatActivity { final String TAG = "chapter23"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); RelativeLayout layout = (RelativeLayout)findViewById(R.id.layout); layout.setOnTouchListener(new RelativeLayout.OnTouchListener(){ @Override public boolean onTouch(View view, MotionEvent motionEvent) { switch(motionEvent.getActionMasked()) { case MotionEvent.ACTION_DOWN: Log.i(TAG,"터치 다운!"); break; case MotionEvent.ACTION_MOVE: Log.i(TAG,"터치 무브!"); break; case MotionEvent.ACTION_UP: Log.i(TAG,"터치 업!"); break; } return true; } }); } } | cs |
10) 이벤트 중복시 다음 이벤트로 전달
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 32 33 | package jjdev.cafe.chapter21; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.Toast; public class MainActivity extends AppCompatActivity{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final Button button = (Button) findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View view) { Toast.makeText(MainActivity.this, "Click!", Toast.LENGTH_SHORT).show(); } }); button.setOnLongClickListener(new View.OnLongClickListener(){ @Override public boolean onLongClick(View view) { Toast.makeText(MainActivity.this, "Long Click!", Toast.LENGTH_SHORT).show(); return true; } }); } } | cs |
'학원에서 배운것들 > TEA - P' 카테고리의 다른 글
2017-06-19-P (0) | 2017.06.19 |
---|---|
2017-06-16-P (0) | 2017.06.16 |
2017-06-14-P (0) | 2017.06.14 |
2017-06-09-P (0) | 2017.06.09 |
2017-06-08-P (0) | 2017.06.08 |