2014-12-31 80 views
1

我有一個像這樣的需求,我想繪製一個畫布中的Android路徑,爲此我開發了一個代碼。這是視圖類。在android中逐步繪製一條路徑

public class MyView extends View { 
public MyView(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
     // TODO Auto-generated constructor stub 
    } 

    public MyView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     // TODO Auto-generated constructor stub 
    } 

    public MyView(Context context) { 
     super(context); 
    } 


    protected void onDraw(Canvas canvas) { 
     // TODO Auto-generated method stub 
     super.onDraw(canvas); 

     Paint paint = new Paint(); 

     paint.setColor(Color.BLACK); 

     paint.setStrokeWidth(3); 

     paint.setStyle(Paint.Style.STROKE); 

     Path path = new Path(); 

     path.moveTo(100, 100); 
     path.lineTo(200, 200); 
     path.lineTo(200, 500); 
     path.lineTo(400, 500); 
     path.lineTo(400, 200); 
     path.lineTo(600, 200); 
     canvas.drawPath(path, paint); 

    } 

} 

這工作得很好,我得到了我想要的drawpath。 現在有一個小的調整,我希望繪製路徑以漸進的方式逐漸出現(例如,如果滾動球從左向右滾動時繪製一條線,它的漸變和緩慢但不是暫停和繪圖)

我試圖實現一個Timertask來使視圖無效並繪製一個全新的視圖,但這只是暫停和繪製,而不是我想要的。

我想,我必須添加一個ObjectAnimator或ValueAnimator到我的代碼。 但我不知道如何實現這一點。 請幫忙

回答

0

我以某種方式知道如何實現它。然而,我不能直接用動畫畫出畫布線,但是找到了一個解決方法,而且實際上對我有用。我用水平進度條代替高度可以忽略不計的線條,然後添加一個Object Animator,它會根據我設置的時間逐漸填充線條。 我將分享每個人的代碼。

In my xml file, I used this, 

<ProgressBar 
     android:id="@+id/progressBar1" 
     style="?android:attr/progressBarStyleHorizontal" 
     android:layout_width="200dp" 
     android:progressDrawable="@drawable/custom_progress" 
     android:layout_height="2dp" 
     android:layout_below="@+id/button1" 
     android:layout_centerHorizontal="true" 
     android:max="100" 
     android:progress="0" 
     android:layout_marginTop="50dp" 
     /> 

And in my Java file , I used this code 

    pbr = (ProgressBar)findViewById(R.id.progressBar1); 

    animation = ObjectAnimator.ofInt(pbr, "progress", 100); 
    animation.setDuration(2000); 
    animation.start(); 

在某種程度上,它給了我一個效果,就像線逐漸繪製一樣。你可以試試看,並檢查