2016-08-01 4 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 생성자를 오버라이드 (override) 할 필요가 :

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

탁월한 성과! –

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의 생성자 중 하나를 호출해야합니다.

관련 문제