2013-07-14 3 views
5

Мне нужно настроить панель поиска таким образом, чтобы в предварительно определенное время сказать, 30 секунд, у меня должна быть точка в строке поиска. Этой длительность варьируется для каждого и каждого видео, так как я устанавливаю точку точки на панели поиска на конкретные вторыхНастройка значка поиска в android,

+0

Вы пытались создать пользовательский вид? – sandrstar

+0

@sandrstar пользовательский вид для панели поиска? класс, расширяющий строку поиска? Не так много идеи, как разместить эти точки. Любая помощь приветствуется, спасибо – user2558496

ответ

16

Here're некоторые возможности:

  1. Put «точка» вид чуть выше SeekBar один. Не будет объяснять это здесь подробно, потому что это тривиальная задача для создания андроида;
  2. SeekBar Extend, как следующее (см 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); 
          } 
         } 
        } 
    } 
    

    Не забывайте о пользовательских ATTRS в 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 не о времени, так что до вас, чтобы обеспечить любую логику времени, связанные с.

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