inform과 announce둘다 모두 알리다 라는 뜻을 가지고 있지만 어떤 차이점이 있을까?

 

inform은 정보가 필요한 사람, 소수에게만 알릴 때 사용하고

announce는 불특정 다수의 사람들에게 알리거나 제품 출시를 발표할때 사용한다. inform보다 더 공식적인 표현이다.

'영어 공부' 카테고리의 다른 글

조동사 정리  (1) 2025.05.30
Words (101~199)  (0) 2025.05.28
Words (1~100)  (0) 2025.05.22

- 부모뷰가 자식 뷰의 터치이벤트를 가로채지 못하게 하는 함수 (requestDisallowInterceptTouchEvent)

(리사이클러뷰안에 웹뷰의 줌 이벤트가 있는 경우 리사이클러뷰의 스크롤 이벤트가 줌 터치이벤트를 가로채는 경우가 있어서 사용함)

requestDisallowInterceptTouchEvent(true) 
//true: 부모뷰가 터치이벤트 가로채지 못함
//false: 부모뷰가 터치이벤트 가로챌 수 있음

 

EditText에 실시간으로 입력된 값에따라 특정 이벤트를 발생시키거나 뷰를 보이게해야 할 때가 있다. 그런경우 TextWatcher라는 Interface를 사용하여 EditText에 실시간으로 입력된 값을 받아 올 수 있다.

 

editText.addTextChangedListener(object : TextWatcher {
            override fun **afterTextChanged**(s: Editable?) {
                // text가 변경된 후 호출
                // s에는 변경 후의 문자열이 담겨 있다.
            }

            override fun **beforeTextChanged**(s: CharSequence?, start: Int, count: Int, after: Int) {
                // text가 변경되기 전 호출
                // s에는 변경 전 문자열이 담겨 있다.
            }

            override fun **onTextChanged**(s: CharSequence?, start: Int, before: Int, count: Int) {
                // text가 바뀔 때마다 호출된다. 
                checkEmail()
            }
        })

 

afterTextChanged(s : Editable?) {}

  • Text가 변경된 후 호출, s→ 변경후의 문자열

beforeTextChanged(s : CharSequence?, start: Int, count: Int, after: Int )

  • Text변경 전 호출 s → 변경전의 문자열
  • start : s에 저장된 문자열에서 새로 추가될 문자열의 시작 위치값(인덱스)
  • count : s에 새로운 문자열이 추가된 후 문자열의 길이
  • after: 새로 추가될 문자열의 길이

onTextChanged(s : CharSequence?, start: Int, before: Int, count: Int)

  • Text실시간 호출 s → 실시간으로 변경되는 문자열
  • start : 새로 추가된 문자열의 시작 위치 값
  • befoer : 삭제된 기존 문자열의 개수
  • count : 새로 추가된 문자열의 개수

'com.google.android.exoplayer:exoplayer:2.8.4’에서 2.9.1로 업데이트를 하려고 했으나 찾아보니

exoplayer는 더이상 업데이트 되지않고 deprecated됐다.

공식적으로 media3를 권장하고 있다. 

 

Deprecated Changed  
SimpleExoPlayer ExoPlayer  
Player.EventListener Player.Listener  
override fun onTimelineChanged(timeline: Timeline?, manifest: Any?, reason: Int) override fun onTimelineChanged(timeline: Timeline, reason: Int)  
override fun onTracksChanged(
trackGroups: TrackGroupArray?,
trackSelections: TrackSelectionArray?)
override fun onTracksChanged(tracks: Tracks)  
override fun onLoadingChanged(isLoading: Boolean) override fun onIsLoadingChanged(isLoading: Boolean)  
override fun onPlayerStateChanged(playWhenReady: Boolean, playbackState: Int) override fun onPlaybackStateChanged(playbackState: Int) //재생상태 변화 감지

onPlayWhenReadyChanged(playWhenReady: Boolean, reason: Int) //재생 준비 상태 감지
두개로 분리
override fun onPlayerError(error: ExoPlaybackException?) override fun onPlayerError(error: PlaybackException)  
override fun onPositionDiscontinuity(reason: Int) override fun onPositionDiscontinuity(
oldPosition: Player.PositionInfo,
newPosition: Player.PositionInfo,
reason: Int)
 
override fun onSeekProcessed() onSeekStarted
onSeekCompleted
onSeekProcessed에서 onSeekStarted
onSeekCompleted 두 상태로 변경
DefaultBandwidthMeter DefaultBandwidthMeter.Builder(exoPlayerView.context).build()
또는 BandwidthMeter
TrackSelector에서 자동으로 측정하는 방식으로 변경되어 설정할 필요 없음
val videoTrackSelectionFactory = AdaptiveTrackSelection.Factory(bandwidthMeter)
val trackSelector = DefaultTrackSelector(videoTrackSelectionFactory)
val trackSelector = DefaultTrackSelector(exoPlayerView.context) AdaptiveTrackSelection 제거
DefaultTrackSelector로 통합
ExoPlayerFactory.newSimpleInstance(exoPlayerView.context, trackSelector) ExoPlayer.Builder(context).setTrackSelector(trackSelector).build() newSimpleInstance 제거
val bandwidthMeter = DefaultBandwidthMeter()
defaultDatasourceFactory = DefaultDataSourceFactory
(context, bandwidthMeter, DefaultHttpDataSourceFactory(userAgent, bandwidthMeter))
val defaultHttpDataSourceFactory = DefaultHttpDataSource.Factory().setUserAgent(userAgent)defaultDatasourceFactory = DefaultDataSource.Factory(context, defaultHttpDataSourceFactory) DefaultDataSourceFactory
→ DefaultHttpDataSource + DefaultDataSource.Factory
prepare(mediaSource) setMediaSource(mediaSource)  
SimpleExoPlayer.VideoListener ExoPlayer.Listener  
addVideoListener addListener  
override fun onVideoSizeChanged( width: Int,
height: Int,
unappliedRotationDegrees: Int, pixelWidthHeightRatio: Float)
override fun onVideoSizeChanged(videoSize: VideoSize) videoSize.width
videoSize.height 등으로 사용 변경
ExtractorMediaSource.Factory(DefaultHttpDataSourceFactory(userAgent)) .createMediaSource(uri) ProgressiveMediaSource.Factory(dataSourceFactory)
.createMediaSource(MediaItem.fromUri(uri))
 
setControllerVisibilityListener { visibility -> exoPlayerView.setControllerVisibilityListener(object : PlayerView.ControllerVisibilityListener { override fun onVisibilityChanged(visibility: Int) override fun onVisibilityChanged 추가
     

 

 

 //변경 예시
 private MediaSource buildMediaSource(Uri uri) {
        String userAgent = Util.getUserAgent(context, "userAgent");
       DefaultHttpDataSource.Factory dataSourceFactory = new DefaultHttpDataSource.Factory().setUserAgent(userAgent);
       // Uri를 MediaItem으로 변환
       MediaItem mediaItem = new MediaItem.Builder().setUri(uri).build();
        if (uri.getLastPathSegment().contains("mp3") || uri.getLastPathSegment().contains("mp4")) {
            return new ProgressiveMediaSource.Factory(dataSourceFactory).createMediaSource(mediaItem);
        } else if (uri.getLastPathSegment().contains("m3u8")) {
            return new HlsMediaSource.Factory(dataSourceFactory).createMediaSource(mediaItem);
        } else {
            return new ProgressiveMediaSource.Factory(dataSourceFactory).createMediaSource(mediaItem);
        }
    }

 

Exo Controller 내부 Id

  • exo_play – 플레이 버튼 (재생 버튼)
  • exo_pause – 일시 정지 버튼
  • exo_progress – 미디어 재생 진행 상태를 나타내는 SeekBar
  • exo_current_time – 현재 재생 시간을 표시하는 텍스트 뷰
  • exo_duration – 전체 재생 시간을 표시하는 텍스트 뷰
  • exo_rew – 10초 뒤로 가기 버튼
  • exo_ff – 10초 앞으로 가기 버튼
  • exo_fullscreen – 전체 화면 버튼 (있는 경우)
  • exo_back – 뒤로가기 버튼 (있는 경우)
  • exo_caption – 자막 버튼 (있는 경우)
  • exo_audio_track – 오디오 트랙 선택 버튼 (있는 경우)
  • exo_vr – VR 모드 버튼 (있는 경우)
  • exo_buffering – 버퍼링 상태를 나타내는 뷰 (로딩 애니메이션)
  • exo_skip_ad – 광고 건너뛰기 버튼 (있는 경우)
  • exo_error – 에러 표시 뷰 (있는 경우)
  • exo_controls – 전체 컨트롤러 영역
  • exo_controller – 전체 컨트롤러의 부모 레이아웃

 

 

+ Recent posts