2016-08-01 92 views
-1

首先我是Android的初學者。 我想創建一個類來處理進度條並設置一些動畫動作。 不幸的是, 系統顯示標題中提到的錯誤。 這是我的代碼:android.widget.ProgressBar中沒有默認的構造函數可用

import android.graphics.Canvas; 
import android.widget.ProgressBar; 

public class TexPtrogressBar extends ProgressBar { 
    @Override 
    protected synchronized void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
    } 
} 

在第三行發生錯誤。 有什麼不對?感謝

回答

0

必須覆蓋3層的構造是這樣的:

public TexPtrogressBar(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
    } 

    public TexPtrogressBar(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public TexPtrogressBar(Context context) { 
     super(context); 
    } 
+0

Thaks它的工作! –

1

ProgressBar類代碼,如果你繼承它,你必須提供的,至少構造

public ProgressBar(Context context, AttributeSet attrs) { 
    this(context, attrs, com.android.internal.R.attr.progressBarStyle); 
} 

public ProgressBar(Context context, AttributeSet attrs, int defStyleAttr) { 
    this(context, attrs, defStyleAttr, 0); 
} 

public ProgressBar(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { 
    super(context, attrs, defStyleAttr, defStyleRes); 

    mUiThreadId = Thread.currentThread().getId(); 
    initProgressBar(); 

    final TypedArray a = context.obtainStyledAttributes(
      attrs, R.styleable.ProgressBar, defStyleAttr, defStyleRes); 

    mNoInvalidate = true; 

    final Drawable progressDrawable = a.getDrawable(R.styleable.ProgressBar_progressDrawable); 
    if (progressDrawable != null) { 
     // Calling this method can set mMaxHeight, make sure the corresponding 
     // XML attribute for mMaxHeight is read after calling this method 
     setProgressDrawableTiled(progressDrawable); 
    } 


    mDuration = a.getInt(R.styleable.ProgressBar_indeterminateDuration, mDuration); 

    mMinWidth = a.getDimensionPixelSize(R.styleable.ProgressBar_minWidth, mMinWidth); 
    mMaxWidth = a.getDimensionPixelSize(R.styleable.ProgressBar_maxWidth, mMaxWidth); 
    mMinHeight = a.getDimensionPixelSize(R.styleable.ProgressBar_minHeight, mMinHeight); 
    mMaxHeight = a.getDimensionPixelSize(R.styleable.ProgressBar_maxHeight, mMaxHeight); 

    mBehavior = a.getInt(R.styleable.ProgressBar_indeterminateBehavior, mBehavior); 

    final int resID = a.getResourceId(
      com.android.internal.R.styleable.ProgressBar_interpolator, 
      android.R.anim.linear_interpolator); // default to linear interpolator 
    if (resID > 0) { 
     setInterpolator(context, resID); 
    } 

    setMax(a.getInt(R.styleable.ProgressBar_max, mMax)); 

    setProgress(a.getInt(R.styleable.ProgressBar_progress, mProgress)); 

    setSecondaryProgress(
      a.getInt(R.styleable.ProgressBar_secondaryProgress, mSecondaryProgress)); 

    final Drawable indeterminateDrawable = a.getDrawable(
      R.styleable.ProgressBar_indeterminateDrawable); 
    if (indeterminateDrawable != null) { 
     setIndeterminateDrawableTiled(indeterminateDrawable); 
    } 

    mOnlyIndeterminate = a.getBoolean(
      R.styleable.ProgressBar_indeterminateOnly, mOnlyIndeterminate); 

    mNoInvalidate = false; 

    setIndeterminate(mOnlyIndeterminate || a.getBoolean(
      R.styleable.ProgressBar_indeterminate, mIndeterminate)); 

    mMirrorForRtl = a.getBoolean(R.styleable.ProgressBar_mirrorForRtl, mMirrorForRtl); 

    if (a.hasValue(R.styleable.ProgressBar_progressTintMode)) { 
     if (mProgressTintInfo == null) { 
      mProgressTintInfo = new ProgressTintInfo(); 
     } 
     mProgressTintInfo.mProgressTintMode = Drawable.parseTintMode(a.getInt(
       R.styleable.ProgressBar_progressBackgroundTintMode, -1), null); 
     mProgressTintInfo.mHasProgressTintMode = true; 
    } 

    if (a.hasValue(R.styleable.ProgressBar_progressTint)) { 
     if (mProgressTintInfo == null) { 
      mProgressTintInfo = new ProgressTintInfo(); 
     } 
     mProgressTintInfo.mProgressTintList = a.getColorStateList(
       R.styleable.ProgressBar_progressTint); 
     mProgressTintInfo.mHasProgressTint = true; 
    } 

    if (a.hasValue(R.styleable.ProgressBar_progressBackgroundTintMode)) { 
     if (mProgressTintInfo == null) { 
      mProgressTintInfo = new ProgressTintInfo(); 
     } 
     mProgressTintInfo.mProgressBackgroundTintMode = Drawable.parseTintMode(a.getInt(
       R.styleable.ProgressBar_progressTintMode, -1), null); 
     mProgressTintInfo.mHasProgressBackgroundTintMode = true; 
    } 

    if (a.hasValue(R.styleable.ProgressBar_progressBackgroundTint)) { 
     if (mProgressTintInfo == null) { 
      mProgressTintInfo = new ProgressTintInfo(); 
     } 
     mProgressTintInfo.mProgressBackgroundTintList = a.getColorStateList(
       R.styleable.ProgressBar_progressBackgroundTint); 
     mProgressTintInfo.mHasProgressBackgroundTint = true; 
    } 

    if (a.hasValue(R.styleable.ProgressBar_secondaryProgressTintMode)) { 
     if (mProgressTintInfo == null) { 
      mProgressTintInfo = new ProgressTintInfo(); 
     } 
     mProgressTintInfo.mSecondaryProgressTintMode = Drawable.parseTintMode(
       a.getInt(R.styleable.ProgressBar_secondaryProgressTintMode, -1), null); 
     mProgressTintInfo.mHasSecondaryProgressTintMode = true; 
    } 

    if (a.hasValue(R.styleable.ProgressBar_secondaryProgressTint)) { 
     if (mProgressTintInfo == null) { 
      mProgressTintInfo = new ProgressTintInfo(); 
     } 
     mProgressTintInfo.mSecondaryProgressTintList = a.getColorStateList(
       R.styleable.ProgressBar_secondaryProgressTint); 
     mProgressTintInfo.mHasSecondaryProgressTint = true; 
    } 

    if (a.hasValue(R.styleable.ProgressBar_indeterminateTint)) { 
     if (mProgressTintInfo == null) { 
      mProgressTintInfo = new ProgressTintInfo(); 
     } 
     mProgressTintInfo.mIndeterminateTintMode = Drawable.parseTintMode(a.getInt(
       R.styleable.ProgressBar_indeterminateTintMode, -1), null); 
     mProgressTintInfo.mHasIndeterminateTintMode = true; 
    } 

    if (a.hasValue(R.styleable.ProgressBar_indeterminateTint)) { 
     if (mProgressTintInfo == null) { 
      mProgressTintInfo = new ProgressTintInfo(); 
     } 
     mProgressTintInfo.mIndeterminateTintList = a.getColorStateList(
       R.styleable.ProgressBar_indeterminateTint); 
     mProgressTintInfo.mHasIndeterminateTint = true; 
    } 

    a.recycle(); 

    applyProgressTints(); 
    applyIndeterminateTint(); 

    // If not explicitly specified this view is important for accessibility. 
    if (getImportantForAccessibility() == View.IMPORTANT_FOR_ACCESSIBILITY_AUTO) { 
     setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES); 
    } 
} 

參考之一到official document

+0

謝謝你的回答! –

0

您的等級

public class TexPtrogressBar extends ProgressBar { 
    @Override 
    protected synchronized void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
    } 
} 

有一個隱含的默認構造函數,看起來編譯器像

public TexPtrogressBar() { 
    super(); // Looking for ProgressBar(); 
} 

但是,ProgressBar沒有與簽名的構造。您需要添加一個調用ProgressBar定義的構造函數的構造函數。

您的構造函數不必具有與ProgressBar的構造函數相同的參數,但它需要調用ProgressBar的構造函數之一。

相關問題