2015-02-01 9 views
0

사용자가 기록한 ~ 30 초의 사운드 클립을 기록, 저장 및 재생하는 앱이 있습니다. 또한 사운드가 태그 된 위치를 기록합니다. 그러나 재생 중에 SeekBar 대신 this과 같은 정적 인 Google지도의 사운드 위치에 맞춤 진행 막대를 표시하고 싶습니다.사운드 재생 진행률 표시 줄에 투명 오버레이가있는 이미지

지도를 한 번 누르면 재생이 시작되고 다시 누르면 재생이 일시 중지됩니다.

나는지도 이미지와 재생 시작/일시 중지 코드를 얻는 방법을 알고 있지만 이제는 진행 오버레이를 추가하고 싶습니다. 이것을 달성하는 방법에 대한 제안이나 지침? 전통적인 SeekBar의 배경색을 스타일링하는 것에 대해 몇 가지 질문을 보았습니다.하지만 위의 모습을 달성하는 데 충분하지 않다고 생각합니다. 고맙습니다!

PS - 모든 코드 예제/샘플도 크게 감사하겠습니다! 처음으로 안드로이드 프로그래머.

답변

0

작업을 구현하는 경우 FrameLayout (자식이없는 레이아웃 XML 파일에 지정됨)을 사용하고 나서 필자가 필요로하는 Views을 프로그래밍 방식으로 추가합니다. FrameLayout에 처음 추가 된 View은 항상 맨 아래에 있고 마지막 하나는 맨 위에 있습니다. FrameLayout에있는 각 View의 위치를 ​​확인하려면 LayoutParams을 사용합니다.

샘플 레이아웃 XML 파일 :

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <FrameLayout 
     android:id="@+id/frameLayout" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1" /> 

</LinearLayout> 

는 활동의 onCreate() 방법에 FrameLayout를 초기화합니다.

FrameLayout frameLayout = (FrameLayout) findViewById(R.id.frameLayout); 

    // set the imageview's layout parameters relative to the frame layout's parameters 
    FrameLayout.LayoutParams imageViewParams = new FrameLayout.LayoutParams(frameLayout.getWidth(), frameLayout.getHeight()); 

    imageViewParams.gravity = Gravity.FILL; 
    imageViewParams.height = LayoutParams.MATCH_PARENT; 
    imageViewParams.width = LayoutParams.MATCH_PARENT; 

    // create the map image view 
    ImageView mapImageView = new ImageView(this); 

    mapImageView.setImageBitmap(mapBitmap); 
    mapImageView.setLayoutParams(imageViewParams); 

    // set the progressbar's layout parameters relative to the frame layout's parameters 
    FrameLayout.LayoutParams progressBarHorizontalParams = new FrameLayout.LayoutParams(frameLayout.getWidth(), frameLayout.getHeight()); 

    progressBarHorizontalParams.gravity = Gravity.FILL; 
    progressBarHorizontalParams.height = LayoutParams.MATCH_PARENT; 
    progressBarHorizontalParams.width = LayoutParams.MATCH_PARENT; 

    // create the progress bar 
    ProgressBar progressBarHorizontal = new ProgressBar(this, null, android.R.attr.progressBarStyleHorizontal); 
    progressBarHorizontal.setLayoutParams(progressBarHorizontalParams); 
    // make the progress bar transparent 
    progressBarHorizontal.setAlpha(0.3f); 

    // add the view(s) to the frame layout 
    frameLayout.addView(mapImageView); 
    frameLayout.addView(progressBarHorizontal); 

이 정보가 도움이되기를 바랍니다.

+0

답변을 주셔서 감사합니다. iRuth, 유용한 코드를 추가해 주셔서 감사합니다! 귀하의 방법으로지도 이미지를 프레임 레이아웃으로 오버레이하는 방법을 알 수 있습니다. 한 가지 더 질문합니다. 어떻게 사운드 재생 진행률 "막대"를 오버레이 할 수 있습니까? – notchopra

+0

'mapImageView'를 추가 한 후에'FrameLayout'에 추가하십시오. 내 대답에서 언급했듯이,'FrameLayout'에 추가 된 마지막 뷰가 맨 위에 있습니다. – iRuth

+0

하지만 그건 내가 확신 할 수없는 부분입니다 - 어떻게 seekbar의 진행 부분을 분리하고 넓고 투명한 오버레이로 포맷해야합니까? – notchopra