Seekbar OR Horizo​​ntal LinearLayout?

时间:2016-02-25 14:48:07

标签: android android-layout android-linearlayout seekbar

我需要在我的Android APP中做这样的图像,我不知道哪种方法最好。

值介于0和150之间,当然数字必须水平滚动(掩码是静态的)。

我有线条的蒙版图像,我想我应该以编程方式将数字放在一个完整的TextViews的水平LinearLayout中。我知道TextViews应具有的确切余量(在dp中)。

滚动后,TextViews必须停在较大的行,我必须能够得到中心的数字(当前选择的值)。

你将如何实现这一目标?

"seekbar"

SOLUTION:

使用HorizontalPicker library很容易达到我的目的。

布局将如下所示。

<RelativeLayout    
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin">


<com.wefika.horizontalpicker.HorizontalPicker
    android:id="@+id/picker"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textColor="@android:color/black"
    android:textSize="@integer/picker_text_size"
    app:sideItems="3"
    android:layout_centerVertical="true"
    android:marqueeRepeatLimit="-1"
    />
<ImageView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:src="@drawable/mask_image"
    android:layout_centerVertical="true"
    android:clickable="false"
    android:scaleType="centerCrop"/>

2 个答案:

答案 0 :(得分:1)

检查this它可能符合您的要求。

答案 1 :(得分:1)

我之前已经完成了这段代码(抱歉它不是开源或其他任何东西),所以我有一些坏消息要告诉你。它有点复杂。

理论上,您提出的大多数问题都可以使用RecyclerView完成,类似于以下代码:

RecyclerView rv = (RecyclerView) findViewById(R.id.recycler);
rv.setLayoutManager(new LinearLayoutManager(this, HORIZONTAL, false);
rv.setAdapter( // Some adapter that will generate the TextViews with numbers and the lines above/below the numbers);

然后是静态叠加层,您只需添加一个单独的布局。

上述代码的问题在于您将无法执行此部分:

  

滚动后,TextViews必须停在较大的行

我发现完成此任务的唯一方法是创建一个100%的自定义视图。这意味着,您必须从以下代码开始:

public class CustomHorizontalSeekBar extends View {

此类将包含触摸事件并包含Scroller以帮助滚动,加速,减速并且必须直接覆盖

@Override
protected void onDraw(Canvas canvas){
}

直接在画布上执行所有绘图,完成它需要相当多的工作,但它确实是一个令人满意的最终结果。

祝你好运,快乐的编码。