2013-07-14 45 views
5

Tôi cần tùy chỉnh thanh tìm kiếm theo cách mà, vào thời điểm xác định trước, 30 giây, tôi phải có dấu chấm trên thanh tìm kiếm. thời gian này thay đổi cho mỗi và mọi video, vì vậy làm thế nào để tôi đặt một dấu chấm điểm trên thanh tìm kiếm ở một đặc biệt thứ haitùy biến thanh tìm kiếm android,

+0

Bạn đã cố tạo chế độ xem tùy chỉnh chưa? – sandrstar

+0

@sandrstar chế độ xem tùy chỉnh cho thanh tìm kiếm? một thanh tìm kiếm mở rộng lớp học? Không có ý tưởng nhiều như làm thế nào để đặt các dấu chấm. Bất kỳ trợ giúp nào được đánh giá cao, cảm ơn – user2558496

Trả lời

16

Here're một số khả năng:

'chấm' xem
  1. Đặt ngay trên SeekBar một. Sẽ không giải thích chi tiết ở đây, vì đó là nhiệm vụ bố trí android tầm thường;
  2. Mở rộng SeekBar, như sau (tham khảo 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); 
          } 
         } 
        } 
    } 
    

    Đừng quên về attrs tùy chỉnh trong res/values/attrs.xml:

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

    Và sử dụng đoạn mã sau:

    setContentView(R.layout.main); 
    
    final DottedSeekBar bar = (DottedSeekBar) findViewById(R.id.seekBar); 
    
    bar.setDots(new int[] {25, 50, 75}); 
    bar.setDotsDrawable(R.drawable.dot); 
    

    với bố cục 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> 
    

    hoặc chỉ main.xml duy nhất:

    <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> 
    

    Bạn có thể lấy hình ảnh sau: enter image description here

  3. Tham khảo this example cho thêm ý tưởng;

Về đặt dấu chấm trên 'thời gian' cụ thể: SeekBar không phải là về thời gian, do đó, nó tùy thuộc vào bạn để cung cấp bất kỳ logic thời gian liên quan.

Các vấn đề liên quan