gpt4 book ai didi

android搜索栏定制,

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:52:35 24 4
gpt4 key购买 nike

我需要以这样一种方式自定义搜索栏,即在预定的时间,比如 30 秒,我应该在搜索栏上有一个点。这个持续时间因每个视频而异,所以我如何在特定的一秒在搜索栏上放置一个点

最佳答案

这里有一些可能性:

  1. 将“点” View 放在 SeekBar 上面。不会在这里详细解释它,因为它是微不足道的 android-layout 任务;
  2. 扩展SeekBar,如下所示(引用this good explanation about custom views):

    /**
    * Seek bar with dots on it on specific time / percent
    */
    public class DottedSeekBar extends SeekBar {

    /** Int values which corresponds to dots */
    private int[] mDotsPositions = null;
    /** Drawable for dot */
    private Bitmap mDotBitmap = null;

    public DottedSeekBar(final Context context) {
    super(context);
    init(null);
    }

    public DottedSeekBar(final Context context, final AttributeSet attrs) {
    super(context, attrs);
    init(attrs);
    }

    public DottedSeekBar(final Context context, final AttributeSet attrs, final int defStyle) {
    super(context, attrs, defStyle);
    init(attrs);
    }

    /**
    * Initializes Seek bar extended attributes from xml
    *
    * @param attributeSet {@link AttributeSet}
    */
    private void init(final AttributeSet attributeSet) {
    final TypedArray attrsArray = getContext().obtainStyledAttributes(attributeSet, R.styleable.DottedSeekBar, 0, 0);

    final int dotsArrayResource = attrsArray.getResourceId(R.styleable.DottedSeekBar_dots_positions, 0);

    if (0 != dotsArrayResource) {
    mDotsPositions = getResources().getIntArray(dotsArrayResource);
    }

    final int dotDrawableId = attrsArray.getResourceId(R.styleable.DottedSeekBar_dots_drawable, 0);

    if (0 != dotDrawableId) {
    mDotBitmap = BitmapFactory.decodeResource(getResources(), dotDrawableId);
    }
    }

    /**
    * @param dots to be displayed on this SeekBar
    */
    public void setDots(final int[] dots) {
    mDotsPositions = dots;
    invalidate();
    }

    /**
    * @param dotsResource resource id to be used for dots drawing
    */
    public void setDotsDrawable(final int dotsResource) {
    mDotBitmap = BitmapFactory.decodeResource(getResources(), dotsResource);
    invalidate();
    }

    @Override
    protected synchronized void onDraw(final Canvas canvas) {
    super.onDraw(canvas);

    final int width = getMeasuredWidth();
    final int step = width / getMax();

    if (null != mDotsPositions && 0 != mDotsPositions.length && null != mDotBitmap) {
    // draw dots if we have ones
    for (int position : mDotsPositions) {
    canvas.drawBitmap(mDotBitmap, position * step, 0, null);
    }
    }
    }
    }

    不要忘记 res/values/attrs.xml 中的自定义属性:

    <resources>
    <declare-styleable name="DottedSeekBar">
    <attr name="dots_positions" format="reference"/>
    <attr name="dots_drawable" format="reference"/>
    </declare-styleable>
    </resources>

    并使用以下代码:

    setContentView(R.layout.main);

    final DottedSeekBar bar = (DottedSeekBar) findViewById(R.id.seekBar);

    bar.setDots(new int[] {25, 50, 75});
    bar.setDotsDrawable(R.drawable.dot);

    使用 main.xml 布局:

    <LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:custom="http://schemas.android.com/apk/res/com.example.TestApp"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.example.TestApp.DottedSeekBar
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/seekBar" />
    </LinearLayout>

    或者只是一个 main.xml:

    <LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:custom="http://schemas.android.com/apk/res/com.example.TestApp"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.example.TestApp.DottedSeekBar
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/seekBar"
    custom:dots_positions="@array/dots"
    custom:dots_drawable="@drawable/dot" />
    </LinearLayout>

    您可以获得如下图片: enter image description here

  3. 引用this example获取更多想法;

关于在特定“时间”上放置点:SeekBar 与时间无关,因此由您提供任何与时间相关的逻辑。

关于android搜索栏定制,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17637925/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com