2016-07-07 3 views
0


Я реализую графическую функцию захвата подписи для своего приложения для Android. В сети Я нашел отлично работает функция, и она уже внутри моего кода. Пользователь рисует свою подпись, и изображение правильно сохраняется!
Теперь я хочу добавить этот код: когда вызывается функция onCreate, я хочу проверить, существует ли уже изображение подписи, и, если да, загрузите его. Благодаря этой реализации пользователи могут проверять свою подпись.
Возможно ли это? Предложения действительно оценены! Заранее спасибо!Android: Загрузить изображение PNG с Canvas

Вот мой код:

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    this.requestWindowFeature(Window.FEATURE_NO_TITLE); 
    setContentView(R.layout.firma_allievo); 
    tempDir = Environment.getExternalStorageDirectory().toString() + "/temp/"+corsok+"/"; 
    ContextWrapper cw = new ContextWrapper(getApplicationContext()); 

    current = tempDir + allievo + ".png"; // THIS IS THE PATH OF THE SIGNATURE IMAGE FILE 

    mypath= new File(current); 
    mContent = (LinearLayout) findViewById(R.id.linearLayout); 

    mSignature = new signature(this, null); 
    mSignature.setBackgroundColor(Color.WHITE); 
    mContent.addView(mSignature, LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); 

    mClear = (Button)findViewById(R.id.clear); 
    mGetSign = (Button)findViewById(R.id.getsign); 
    mGetSign.setEnabled(true); 
    mCancel = (Button)findViewById(R.id.cancel); 
    mView = mContent; 

    mClear.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      mSignature.clear(); 
     } 
    }); 

    mGetSign.setOnClickListener(new OnClickListener() 
    { 
     public void onClick(View v) 
     { 
      boolean error = captureSignature(); 
      if(!error){ 
       mView.setDrawingCacheEnabled(true); 
       mSignature.save(mView); 
       Bundle b = new Bundle(); 
       b.putString("status", "done"); 
       Intent intent = new Intent(); 
       intent.putExtras(b); 
       setResult(RESULT_OK,intent); 
       finish(); 
      } 
     } 
    }); 
} 

ответ

0

Это должно быть так просто, как это сделать:

ImageView image = (ImageView) findViewById(R.id.test_image); 
Bitmap bMap = BitmapFactory.decodeFile("/sdcard/test2.png"); 
image.setImageBitmap(bMap); 

Если вы хотите нарисовать изображение на холсте, то вы можете использовать растровое изображение, чтобы создать BitmapDrawable, а затем рисование Drawable на холсте тривиально.

Bitmap bMap = BitmapFactory.decodeFile("/sdcard/test2.png"); 
Drawable d = new BitmapDrawable(bMap); 
d.setBounds(left, top, right, bottom); 
d.draw(canvas); 
0

Здесь signature ниже:

public class signature extends View 
    { 
     private static final float STROKE_WIDTH = 5f; 
     private static final float HALF_STROKE_WIDTH = STROKE_WIDTH/2; 
     private Paint paint = new Paint(); 
     private Path path = new Path(); 

    private float lastTouchX; 
    private float lastTouchY; 
    private final RectF dirtyRect = new RectF(); 

    public signature(Context context, AttributeSet attrs) 
    { 
     super(context, attrs); 
     paint.setAntiAlias(true); 
     paint.setColor(Color.BLACK); 
     paint.setStyle(Paint.Style.STROKE); 
     paint.setStrokeJoin(Paint.Join.ROUND); 
     paint.setStrokeWidth(STROKE_WIDTH); 
    } 

    public void save(View v) 
    { 
     if(mBitmap == null) 
     { 
      mBitmap = Bitmap.createBitmap (mContent.getWidth(), mContent.getHeight(), Bitmap.Config.RGB_565);; 
     } 
     Canvas canvas = new Canvas(mBitmap); 
     try 
     { 
      FileOutputStream mFileOutStream = new FileOutputStream(mypath); 

      v.draw(canvas); 
      mBitmap.compress(Bitmap.CompressFormat.PNG, 90, mFileOutStream); 
      mFileOutStream.flush(); 
      mFileOutStream.close(); 
      String url = Images.Media.insertImage(getContentResolver(), mBitmap, "title", null); 
       //In case you want to delete the file 
       //boolean deleted = mypath.delete(); 
       //Log.v("log_tag","deleted: " + mypath.toString() + deleted); 
       //If you want to convert the image to string use base64 converter 

     } 
     catch(Exception e) 
     { 
      Log.v("log_tag", e.toString()); 
     } 
    } 

    public void clear() 
    { 
     path.reset(); 
     invalidate(); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) 
    { 
     canvas.drawPath(path, paint); 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) 
    { 
     float eventX = event.getX(); 
     float eventY = event.getY(); 
     mGetSign.setEnabled(true); 
     acquisisciFirma = "SI"; 

     switch (event.getAction()) 
     { 
      case MotionEvent.ACTION_DOWN: 
       path.moveTo(eventX, eventY); 
       lastTouchX = eventX; 
       lastTouchY = eventY; 
       return true; 

      case MotionEvent.ACTION_MOVE: 

      case MotionEvent.ACTION_UP: 

       resetDirtyRect(eventX, eventY); 
       int historySize = event.getHistorySize(); 
       for (int i = 0; i < historySize; i++) 
       { 
        float historicalX = event.getHistoricalX(i); 
        float historicalY = event.getHistoricalY(i); 
        expandDirtyRect(historicalX, historicalY); 
        path.lineTo(historicalX, historicalY); 
       } 
       path.lineTo(eventX, eventY); 
       break; 

      default: 
       debug("Ignored touch event: " + event.toString()); 
       return false; 
     } 

     invalidate((int) (dirtyRect.left - HALF_STROKE_WIDTH), 
       (int) (dirtyRect.top - HALF_STROKE_WIDTH), 
       (int) (dirtyRect.right + HALF_STROKE_WIDTH), 
       (int) (dirtyRect.bottom + HALF_STROKE_WIDTH)); 

     lastTouchX = eventX; 
     lastTouchY = eventY; 

     return true; 
    } 

    private void debug(String string){ 
    } 

    private void expandDirtyRect(float historicalX, float historicalY) 
    { 
     if (historicalX < dirtyRect.left) 
     { 
      dirtyRect.left = historicalX; 
     } 
     else if (historicalX > dirtyRect.right) 
     { 
      dirtyRect.right = historicalX; 
     } 

     if (historicalY < dirtyRect.top) 
     { 
      dirtyRect.top = historicalY; 
     } 
     else if (historicalY > dirtyRect.bottom) 
     { 
      dirtyRect.bottom = historicalY; 
     } 
    } 

    private void resetDirtyRect(float eventX, float eventY) 
    { 
     dirtyRect.left = Math.min(lastTouchX, eventX); 
     dirtyRect.right = Math.max(lastTouchX, eventX); 
     dirtyRect.top = Math.min(lastTouchY, eventY); 
     dirtyRect.bottom = Math.max(lastTouchY, eventY); 
    } 
} 
1

решаемые сам! Загруженный битмарт установлен в качестве фона в компоненте Canvas. Вот код:

File file = new File(current); 
if(file.exists()) { 
    Bitmap bMap = BitmapFactory.decodeFile(current); 
    Drawable d = new BitmapDrawable(bMap); 
    mSignature.setBackground(d); 
} 

Примечание: минимальный уровень 16 API!

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