2015-02-01 2 views
0

У меня есть приложение, которое записывает, сохраняет и воспроизводит ~ 30 секундные звуковые клипы, записанные пользователями. Он также записывает местоположение, на которое был помечен звук. Во время воспроизведения, однако, вместо SeekBar, я хотел бы создать пользовательский индикатор выполнения над статическим изображением Google, отображающим местоположение звука, например this.Изображение с прозрачным наложением для индикатора хода воспроизведения звука

Повторное нажатие карты начнет воспроизведение, а повторное нажатие приведет к приостановке воспроизведения.

Я знаю, как получить изображение карт и код для запуска/приостановки воспроизведения, но теперь я хотел бы добавить на него оверлей прогресса. Любые предложения или рекомендации о том, как достичь этого? Я видел несколько вопросов по стилизации цвета фона традиционного SeekBar, но я не думаю, что этого достаточно для достижения вышеупомянутого взгляда. Спасибо!

PS - Любые примеры кода/образцы также были бы очень оценены! Первый программист для Android здесь.

ответ

0

Если бы я должен был выполнить вашу задачу, я бы использовал FrameLayout (указанный в моем XML-файле макета без детей), а затем я программно добавлю Views, который мне нужно. Первый View, добавленный к FrameLayout, всегда находится внизу, а последний находится наверху. Я бы использовал LayoutParams, чтобы определить положение каждого View в FrameLayout.

Пример файла макета 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> 

Инициализировать FrameLayout в onCreate() методе активность в.

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

Добавьте его в 'FrameLayout' после того, как вы добавили' mapImageView'. Как я уже упоминал в своем ответе, последнее представление, которое добавлено в «FrameLayout», находится наверху. – iRuth

+0

Но это та часть, о которой я не знаю - как изолировать прогрессную часть поискового бара и отформатировать его как широкий, прозрачный оверлей. – notchopra

Смежные вопросы