我有一个应用程序可以记录,存储和播放用户录制的约30秒的声音片段。它还记录声音标记的位置。然而,在播放期间,我想在声音位置的静态Google地图图像上创建一个自定义进度条,而不是SeekBar,如this。
按一次地图将开始播放,再按一次将暂停播放。
我知道如何获取用于启动/暂停播放的地图图像和代码,但现在我想向其添加进度叠加层。有关如何实现这一目标的任何建议或指导?我看到了一些关于传统SeekBar背景颜色造型的问题,但我认为这对我来说不足以实现上述效果。谢谢!
PS - 任何代码示例/样本也将受到青睐!这是Android程序员的第一次。
答案 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);
我希望这会有所帮助。