테크 지식
[커뮤니티] 아마도 쉬운 안드로이드 어플만들기 [42] 시크바(SeekBar)
퍼갈 때에는 반드시 저작자의 허락과 저작자의 이름(아이디)를 기록하어야 합니다.
저작자는 Snails(tjdtnsu)입니다.
덧글은 강의 제작자에게 큰 힘이 됩니다
참고 : 이 강좌는 초보자를 위한 Eclipse를 사용하였습니다.
올리는 곳 : 제 네이버 블로그, 디벨로이드 카페
업로드 시간 : 매달 2,4주 오후 11시
난이도 : ★★★★★☆
이번 시간에는 시크바를 하겠습니다
시크바라고 하면, 뭐 볼륨, 밝기 등을 조절 할 때 나오는 바로써
거의 다 봤다고 칩시다
액티비티에서,
그 많이 보던 것(시드바라고도 하고 프로그래스바라고도 한다)을 드래그 앤 드롭으로 끌어옵시다
Value.. 뭐시기 적혀 있는 건 TextView이므로 참고하세요
자, 그러면 코드를 보시겠습니다
xml - activity_main.xml
<RelativeLayout xmlns:androhttp://schemas.android.com/apk/res/android">http://schemas.android.com/apk/res/android</a>" xmlns:tools="http://schemas.android.com/tools" android:layout_ 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=".MainActivity" > <TextView android: android:layout_ android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:layout_marginTop="21dp" android:text="Value : 0" /> <SeekBar android: android:layout_ android:layout_height="wrap_content" android:layout_alignParentRight="true" android:max="100" android:layout_below="@+id/textView1" /> <TextView android: android:layout_ android:layout_height="wrap_content" android:layout_alignLeft="@+id/seekBar1" android:layout_below="@+id/seekBar1" android:text="" /> </RelativeLayout> |
java - MainActivity.java
package com.meap; import android.app.Activity;import android.os.Bundle;import android.view.Menu;import android.widget.SeekBar;import android.widget.TextView; public class MainActivity extends Activity { SeekBar s; TextView v; TextView e; int progress; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); s = (SeekBar) findViewById(R.id.seekBar1); v = (TextView) findViewById(R.id.textView1); e = (TextView) findViewById(R.id.textView2); s.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onStartTrackingTouch(SeekBar seekBar1) { e.setText("시드바를 만지고 있습니다"); } @Override public void onProgressChanged(SeekBar seekBar1, int progress, boolean arg2) { s.setProgress(progress); v.setText("Value : "+ progress); if((int)progress==32) e.setText("음?"); else e.setText("시드바를 만지고 있습니다"); } @Override public void onStopTrackingTouch(SeekBar seekBar1) { e.setText(""); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } } |
음음음 코드는 복잡하지만 해석은 간단합니다
일단 xml 코드에서 볼 건
android:max="100"인데, 이것은 시드바의 최댓값을 지정합니다.
귀찮으니깐 100으로 했습니다.
SeekBar s; TextView v; TextView e;int progress;변수 정의 부분입니다. 여기서 주의할 점 나갑니다.
제가 많이 겪었던 부분입니다.
값을 미리 지정해주면 강제종료됩니다. 예를 들면
TextView v = (TextView) findViewById(R.id.textView1);
이러면 강제종료됩니다. 그러므로 변수값은 꼭 따로 안에 집어넣으세요
s.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {은 클래스를 생성하는 부분입니다. 여기서 시드바에 대한 설정을 합니다.
s.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { public void onProgressChanged(SeekBar seekBar, int progress, boolean b) { //여기에 시드바가 터치되고 있을 때의 코드를 지정합니다 }
public void onStartTrackingTouch(SeekBar seekBar) { // 여기에 시드바가 터치되기 시작할 때의 코드를 지정합니다 }
public void onStopTrackingTouch(SeekBar seekBar) { // 여기에 시드바가 터치에서 떼 졌을 때의 코드를 지정합니다 } }); |
위는 코드는 이 클래스가 사용될 때의 코드입니다.
저는 onProgressChanged만 썼습니다. 그 만큼 이게 제일 많이 사용됩니다.
s.setProgress(progress);v.setText("Value : "+ progress);if((int)progress==32) e.setText("음?");여기서 프로그래스 값을 받아서, TextView에 출력합니다.
그리고 오늘은 특별히 거의 이스터 에그로
progress 값이 32일 때 음? 이라는 걸 추가로 출력하도록 합니다.
그러면 설명은 끝났으면 출력 결과를 보시죠
그렇습니다. 다음 시간에는 시간 출력을 하겠습니다.