带有透明覆盖的图像,用于声音播放进度条

时间:2015-02-01 20:44:45

标签: android overlay customization progress seekbar

我有一个应用程序可以记录,存储和播放用户录制的约30秒的声音片段。它还记录声音标记的位置。然而,在播放期间,我想在声音位置的静态Google地图图像上创建一个自定义进度条,而不是SeekBar,如this

按一次地图将开始播放,再按一次将暂停播放。

我知道如何获取用于启动/暂停播放的地图图像和代码,但现在我想向其添加进度叠加层。有关如何实现这一目标的任何建议或指导?我看到了一些关于传统SeekBar背景颜色造型的问题,但我认为这对我来说不足以实现上述效果。谢谢!

PS - 任何代码示例/样本也将受到青睐!这是Android程序员的第一次。

1 个答案:

答案 0 :(得分: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);

我希望这会有所帮助。