2014-12-09 4 views
0

Я получаю эту ошибку, когда я пытаюсь генерировать подписанную APKAndroid Студия: Ошибка при создании подписал APK

Error:Error: This class should provide a default constructor (a public constructor with no arguments) (com.STMReport.Viewer.FirmaDigital) [Instantiatable] 

Может кто-нибудь помочь мне с несколько советов о том, что является причиной этого? Я исследовал об этой проблеме, и он должен делать с супер() на конструктор по умолчанию, но когда я попытался удалить строку кода, он дает мне другую ошибку

Error:(24, 42) error: no suitable constructor found for View(no arguments) 
constructor View.View(Context) is not applicable 

Вот мой класс:

package com.STMReport.Viewer; 

import android.content.Context; 
import android.graphics.Bitmap; 
import android.graphics.Canvas; 
import android.graphics.Paint; 
import android.graphics.Path; 

import android.view.MotionEvent; 
import android.view.View; 


public class FirmaDigital extends View { 

private Bitmap mBitmap; 
private Canvas mCanvas; 
private Path mPath; 
private Paint mBitmapPaint; 
private Paint mPaint; 
private float mX, mY; 
private static final float TOUCH_TOLERANCE = 4; 


public FirmaDigital(Context context) { 
    super(context); 

    mPath = new Path(); 
    mBitmapPaint = new Paint(Paint.DITHER_FLAG); 

    mPaint = new Paint(); 
    mPaint.setAntiAlias(true); 
    mPaint.setDither(true); 
    mPaint.setColor(0xFF000000); 
    mPaint.setStyle(Paint.Style.STROKE); 
    mPaint.setStrokeJoin(Paint.Join.ROUND); 
    mPaint.setStrokeCap(Paint.Cap.ROUND); 
    mPaint.setStrokeWidth(3); 
} 
@Override 
protected void onSizeChanged(int w, int h, int oldw, int oldh) { 
    super.onSizeChanged(w, h, oldw, oldh); 
    mBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888); 
    mCanvas = new Canvas(mBitmap); 
} 

@Override 
protected void onDraw(Canvas canvas) { 
    canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint); 

    canvas.drawPath(mPath, mPaint); 
} 

private void touch_starto(float x, float y) { 
    mPath.reset(); 
    mPath.moveTo(x, y); 
    mX = x; 
    mY = y; 
} 

private void touch_mover(float x, float y) { 
    float dx = Math.abs(x - mX); 
    float dy = Math.abs(y - mY); 
    if (dx >= TOUCH_TOLERANCE || dy >= TOUCH_TOLERANCE) { 
     mPath.quadTo(mX, mY, (x + mX)/2, (y + mY)/2); 
     mX = x; 
     mY = y; 
    } 
} 

private void touch_ups() { 
    mPath.lineTo(mX, mY); 
    // commit the path to our offscreen 
    mCanvas.drawPath(mPath, mPaint); 
    // kill this so we don't double draw 
    mPath.reset(); 
} 
@Override 
public boolean onTouchEvent(MotionEvent event) { 
    float x = event.getX(); 
    float y = event.getY(); 

    switch (event.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      touch_starto(x, y); 
      invalidate(); 
      break; 
     case MotionEvent.ACTION_MOVE: 
      touch_mover(x, y); 
      invalidate(); 
      break; 
     case MotionEvent.ACTION_UP: 
      touch_ups(); 
      invalidate(); 
      break; 
    } 
return true; 
} 

} 

Я забыл добавить, как я использую класс:

public class FirmaActivity extends Activity { 

RelativeLayout parent; 
FirmaDigital firma; 
@Override 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_firma); 
    parent = (RelativeLayout)findViewById(R.id.FirmaLayout); 
    firma = new FirmaDigital(this); 
    parent.addView(firma); 
} 
} 

Любая помощь будет оценена спасибо!

+0

Лучшее решение для меня здесь [проверьте это] (http://stackoverflow.com/questions/17420637/error-non-default-constructors-in-fragments/39608360#39608360) –

ответ

0

Я считаю, что вы должны предоставить конструктор, который принимает контекст и AttributeSet в качестве параметров

Вы можете обратиться к этой ссылке http://developer.android.com/training/custom-views/create-view.html

+0

Извините, если это звучит как немой вопрос, но что именно делает AttributeSet? –

+0

Вот несколько ссылок, которые могут быть полезны http://developer.android.com/reference/android/util/AttributeSet.html http://javatechig.com/android/creating-custom-views-in-android-tutorial http://www.vogella.com/tutorials/AndroidCustomViews/article.html http://stackoverflow.com/questions/8302229/accessing-attrs-in-attributeset-for-custom-components – ArsenalFC

+0

Спасибо за информацию, она работает теперь –

0

Попытка определить конструктор в настраиваемое представление, как:

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

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

    public FirmaDigital(Context context) { 
     super(context); 
     init(); 
    } 

    public void init(){ 
     mPath = new Path(); 
     mBitmapPaint = new Paint(Paint.DITHER_FLAG); 

     mPaint = new Paint(); 
     mPaint.setAntiAlias(true); 
     mPaint.setDither(true); 
     mPaint.setColor(0xFF000000); 
     mPaint.setStyle(Paint.Style.STROKE); 
     mPaint.setStrokeJoin(Paint.Join.ROUND); 
     mPaint.setStrokeCap(Paint.Cap.ROUND); 
     mPaint.setStrokeWidth(3); 
    } 
+0

Спасибо за быстрый ответ, но это не исправило ошибку. –

Смежные вопросы