Chap6. 인터페이스 기초03 - Custom View, Toast, Beep, Vibration, etc
: 미리 만들어 놓은 뷰가 아닌 개발자가 직접 모양 및 기능등을 정의하여 만든 뷰.
ex.
class MyView extends View {
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);
}
...
}
ex1. MainActivity의 내부클래스로 MyView(CustomView)선언하기
(링크)
ex2. CustomView를 XML 레이아웃에 선언하기
(링크)
: 그림을 그리는 영역을 담당하는 클래스
; 시스템에서 제공되는 클래스임.
; View 클래스의 onDraw() 메소드의 매개변수로 전달됨. (전달받은 Canvas 객체를 수정하여 그려지는 모양이 변경된다)
// 점 그리기
void drawPoint (float x, float y, Paint paint)
// 선 그리기
void drawLine (float startX, float startY, float stopX, float stopY, Paint paint)
// 원 그리기
void drawCircle (float cx, float cy, float radius, Paint paint)
// 사각형 그리기
void drawRect (float left, float top, float right, float bottom, Paint paint)
// 텍스트 그리기
void drawText (String text, float x, float y, Paint paint)
: Canvas에 그림을 그리기 위해 사용하는 펜 역할로 그리기에 대한 속성 정보를 지정한다.
paint.setAntiAlias(true);
또는
new Paint(Paint.ANTI_ALIAS_FLAG)
: 짧은 소리 출력용 (효과음 같은)
; res폴더에 raw폴더 생성 후 sound파일을 복사하여 준비 후 아래코드 실행
SoundPool soundPool = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);
int sound = soundPool.load(this, R.raw.dingdong, 1);
soundPool.play(sound, 1, 1, 0, 0, 1);
//new SoundPool(maxStreams, STREAM_MUSIC, srcQuality)
//load(context, sound파일주소, priority)
//play(sound, leftVolume, rightVolume, priority, loop, rate)
: 시스템 서비스로부터 Vibrator 객체를 획득하여 진동을 발생 시킨다.
Vibrator vibrator = (Vibrator)getSystemService(Context.VIBRATOR_SERVICE);
vibrator.vibrate(1000); //1초 진동
//또는 vibrator.vibrate(new long[] {100, 50, 200, 50}, 0);
vibrator.cancel();
//vibrate(milliseconds)
//vibrate(new long[] {100, 50, 200, 50}, repeat)
+) AndroidManifest.xml에 permission을 추가해야 한다.
<uses-permission android:name="android.permission.VIBRATE" />
: 기기의 특정 기능을 사용하기 위해 앱이 받는 허가.
; 퍼미션을 받지 않은 상태에서 앱이 특정 기능을 사용할 경우 예외 발생.
필요한 퍼미션을 AndroidManifest에 추가
ex. 네트워크 퍼미션을 추가한다고 했을 때
ACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATION
퍼미션 필요 위치에서의 퍼미션 확인
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
!= PackageManager.PERMISSION_GRANTED
&& ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[] {Manifest.permission.ACCESS_FINE_LOCATIONS,
Manifest.permission.ACCESS_COARSE_LOCATION},
MY_PERMISSION_REQUEST_ACCESS_LOCATION);
return;
}
// if(조건) { 수행 }
Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION
: 확인 대상 퍼미션
ActivityCompat.requestPermissions(...);
: 퍼미션 확인 요청
MY_PERMISSION_REQUEST_ACCESS_LOCATION);
: 퍼미션 요청 식별 코드 (상수로 선언)
@Override
public void onRequestPermissionResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch(requestCode) {
case MY_PERMISSION_REQUEST_ACCESS_LOCATIONS:
if(grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED
&& grantResults[1] == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(this, "Permission was granted!!!", Toast.LENGTH_SHORT).show();
}
else {
Toast.makeText(this, "Permission was denied!!!", Toast.LENGTH_SHORT).show();
}
return;
}
}
사용자의 퍼미션 설정 정보는 내부에 저장되어 유지된다.