2016-08-01 45 views
-1

最初はアンドロイドの初心者です。 プログレスバーを扱うためのクラスを作成し、いくつかのアニメーションアクションを設定したいと考えています。 残念ながら、 システムでは、タイトルに記載されているエラーが表示されます。 これは私のコードです: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 it worked! –

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); 
    } 
} 

が参照コンストラクタの1 〜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の定義済みコンストラクタの1つを呼び出すコンストラクタを追加する必要があります。

コンストラクタはProgressBarのコンストラクタと同じパラメータを持つ必要はありませんが、ProgressBarのコンストラクタのいずれかを呼び出す必要があります。

関連する問題