2011-10-06 38 views
0

我想更改自定义垂直搜索栏How can I get a working vertical SeekBar in Android?的进步色彩的工作,如果我在一个View.OnTouchListener把这个代码,它工作正常:方法来改变在Android定制的垂直搜索条的进步色彩,而不是从一个线程

VerticalSeekBar verticalSeekBar1 = (VerticalSeekBar)verticalSeekBar; 
Rect bounds = verticalSeekBar1.getProgressDrawable().getBounds(); 
int progr = verticalSeekBar1.getProgress(); 
int max = verticalSeekBar1.getMax(); 
int width = verticalSeekBar1.getWidth(); 
int height = verticalSeekBar1.getHeight(); 
prDr = verticalSeekBar1.getProgressDrawable(); 
verticalSeekBar1.setProgressDrawable(r.getDrawable(R.drawable.myprogress)); 
verticalSeekBar1.getProgressDrawable().setBounds(bounds); 
verticalSeekBar1.setMax(max); 
verticalSeekBar1.setProgress(1); 
verticalSeekBar1.setProgress(progr); 
verticalSeekBar1.onSizeChanged(width, height); 
verticalSeekBar1.refreshDrawableState(); 

但是,如果我把另一个线程它的工作原理部分,因为搜索条的拇指不会转到正确的位置相同的代码,而是下降,但进步的色彩效果很好,并得到最后一个位置。 我觉得onSizeChanged方法可能会导致这种情况。我调试它,并发现,在这两种情况下onSizeChanged方法有适当的参数,但在从线程代码,它不更新搜索条。

我已经尝试过这种代码移动到用户界面的线程,但也不管用。

回答

0

,我读了使用处理程序或可以的AsyncTask更新UI做的工作,并且做的伎俩。

uiHandler.post(new Runnable() { 
       VerticalSeekBar vs; 
       Rect bounds; 
       int progr; 
       int max; 
       int width; 
       int height; 
       { 
        vs = verticalSeekBars.get(currentNote); 
        bounds = vs.getProgressDrawable().getBounds(); 
        progr = vs.getProgress(); 
        max = vs.getMax(); 
        width = vs.getWidth(); 
        height = vs.getHeight(); 
       } 

       public void run() { 
        if(currentBytes != 0) { 
         VerticalSeekBar vsBack = verticalSeekBars.get(currentNote-1); 
         Rect bounds = vsBack.getProgressDrawable().getBounds(); 
         int progr = vsBack.getProgress(); 
         int max = vsBack.getMax(); 
         int width = vsBack.getWidth(); 
         int height = vsBack.getHeight(); 
         vsBack.setProgressDrawable(prDrInactive); 
         vsBack.getProgressDrawable().setBounds(bounds); 
         vsBack.setMax(max); 
         vsBack.setProgress(1); 
         vsBack.setProgress(progr); 
         vsBack.onSizeChanged(width, height); 
         vsBack.refreshDrawableState(); 
        } 

绘画笔记。

    prDrInactive = vs.getProgressDrawable(); 

        vs.setProgressDrawable(prDrActive); 
        vs.getProgressDrawable().setBounds(bounds); 
        vs.setMax(max); 
        vs.setProgress(1); 
        vs.setProgress(progr); 
        vs.onSizeChanged(width, height); 
        vs.refreshDrawableState(); 
       } 
      }); 
2
LinearLayout linearLayout = new LinearLayout(getApplicationContext()); 

    LinearLayout.LayoutParams rlp = new LinearLayout.LayoutParams(
      LinearLayout.LayoutParams.WRAP_CONTENT, 
      LinearLayout.LayoutParams.FILL_PARENT); 

    // linearLayout.setOrientation(LinearLayout.VERTICAL); 

    VerticalSeekBar_1 verticalSeekBar_1 = new VerticalSeekBar_1(
      getApplicationContext()); 

    // ------------ custom seekbar 
    LayerDrawable layer = (LayerDrawable) verticalSeekBar_1 
    .getProgressDrawable(); 

    Drawable draw1 = (Drawable) layer 
    .findDrawableByLayerId(android.R.id.progress); 

    Bitmap bitmap1 = BitmapFactory.decodeResource(getApplicationContext() 
    .getResources(), R.drawable.scroll_on); 

    draw1 = new ClipDrawable(new BitmapDrawable(bitmap1), 
    Gravity.AXIS_PULL_BEFORE, ClipDrawable.HORIZONTAL); 

    layer.setDrawableByLayerId(android.R.id.progress, draw1); 

    Drawable draw2 = (Drawable) layer 
    .findDrawableByLayerId(android.R.id.background); 

    Bitmap bitmap2 = BitmapFactory.decodeResource(getApplicationContext() 
    .getResources(), R.drawable.scroll_off); 

    draw2 = new BitmapDrawable(bitmap2); 
    layer.setDrawableByLayerId(android.R.id.background, draw2); 

    // -------------- 



    verticalSeekBar_1.setLayoutParams(rlp); 

    verticalSeekBar_1.setMax(100); 
    verticalSeekBar_1.setProgress(30); 
    verticalSeekBar_1 
      .setOnSeekBarChangeListener(new OnSeekBarChangeListener() { 

       @Override 
       public void onProgressChanged(SeekBar seekBar, 
         int progress, boolean fromUser) { 
        // TODO Auto-generated method stub 

       } 

       @Override 
       public void onStartTrackingTouch(SeekBar seekBar) { 
        // TODO Auto-generated method stub 

       } 

       @Override 
       public void onStopTrackingTouch(SeekBar seekBar) { 
        // TODO Auto-generated method stub 

       } 
      }); 

    linearLayout.addView(verticalSeekBar_1); 
    setContentView(linearLayout);