Android自定义的SeekBar

  • TextView设置删除线
mTvDemo.setPaintFlags(Paint.STRIKE_THRU_TEXT_FLAG);
  • TextView设置文本格式
mTvPay.setText(String.format(getString(R.string.price_format_pay), mPayDetail.price));
其中
支付¥%1$s
更多的格式,比如视频播放时间:特殊符号用\转义,02d表示接收的是数字,格式为两位,不足的前面补0。这个格式接收两个数字作为参数,下面的设置会显示03'19''
%1$02d\'%2$02d\"
mTvTime.setText(String.format(getString(R.string.mv_video_time), 3,19));
  • 自定义带二级进度的seekbar样式
    效果图:
image.png
  1. seekbar的xml
        

icon_play_seek_point是一个进度标志的icon,android:maxHeight与android:minHeight控制进度条的高度,这个不影响进度icon的大小。

  1. 进度相关的drawable:seekbar_bkg.xml


    
    
        
    
    
        
    

  1. 各级背景的xml:

3.1 seekbar_progress_bkg.xml



    

3.2 seekbar_progress_first.xml



    

3.3 seekbar_progress_second.xml



    

3.4 取消seekbar的点击和滑动功能,只作为展示用

 mSeekBar.setOnTouchListener(new OnTouchListener() {
      @Override
      public boolean onTouch(View v, MotionEvent event) {
           // 禁止拖动和点击
           return true;
       }
     });
  • 设计说要加上圆角,正好精简一下:
  1. 直接用一个样式搞定,seekbar_bkg_two_progress.xml


    
        
            
            
        
    
    
        
            
                
                
            
        
    
    
        
            
                
                
            
        
    


  1. 定义一个style用于格式通用:
    
  1. 关于Activity主题的问题:
    系统SeekBar的thumb用的带阴影的png,当Activity时非透明的主题时,尽管边界为透明,阴影还是会影响显示,圆形两侧有缝隙:
image.png
Android自定义的SeekBar_第1张图片
image.png

所以用带阴影的切图的话,上下可以有透明阴影,两端不能有投影,要紧贴圆形的左右边界,都是因为没有仔细想,只是一味的看现象改代码。最后,用layer-list代码创造阴影:
style中改为:

@drawable/seek_bar_thumb_shadow

其中seek_bar_thumb_shadow.xml为



    
        
            
            
        
    
    
        
            
                
                
            
        
    
    
        
            
                
                
            
        
    

一个简单的样式,如此多细节,关键是没有真正弄明白各种样式,主题和作用机制,面向运气编程果真不靠谱啊!
所以,去自定义吧

你可能感兴趣的:(Android自定义的SeekBar)