0

На следующий щелчок, когда пользователь вводит текст, предыдущий текст на изображении ушел. Как сохранить все текстовые входы на растровые изображения, доступные для всех событий кликов. Пожалуйста, предложите.как показать андроид bitmapdrawable change on next clickevents

onCreate() { 

    ImageView mView = (ImageView) findViewById(R.id.dstImageView); 
    Drawable myDrawable = getResources().getDrawable(R.drawable.pic2); 
    mView.setImageDrawable(myDrawable); 
    mView.setOnTouchListener(new View.OnTouchListener() { 
      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       if(event.getAction() == MotionEvent.ACTION_DOWN){ 
       float x = event.getX(); 
       float y = event.getY(); 
       showNameDialog(); 

    } 
} 

private void showNameDialog() { 
    AlertDialog.Builder alert = new AlertDialog.Builder(this); 

    alert.setTitle("Photo Tag"); 
    alert.setMessage("Tag Message"); 
    // Set an EditText view to get user input 
    final EditText input = new EditText(this); 
    alert.setView(input); 
    alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int whichButton) { 
     Editable value = input.getText(); 
     // Do something with value! 
     ImageView mView3 = (ImageView) findViewById(R.id.dstImageView); 
     myDrawable test= writeTextOnDrawable(R.drawable.pic2,value.toString(),touchxpos,touchypos); 
     mView3.setImageDrawable(myDrawabletest); 
     } 
    }); 

// write text on drawable 
private BitmapDrawable writeTextOnDrawable(int drawableId, String text,float xPos,float yPos) 
{ 
    Bitmap bm = BitmapFactory.decodeResource(getResources(), drawableId).copy(Bitmap.Config.ARGB_8888, true); 
    Typeface tf = Typeface.create("Helvetica", Typeface.BOLD); 
    Paint paint = new Paint(); 
    paint.setStyle(Style.FILL); 
    paint.setColor(Color.RED); 
    paint.setTypeface(tf); 
    paint.setTextAlign(Align.CENTER); 
    paint.setTextSize(11); 
    Rect textRect = new Rect(); 
    paint.getTextBounds(text, 0, text.length(), textRect); 
    Canvas canvas = new Canvas(bm); 
    canvas.drawText(text, xPos, yPos, paint); 
    return new BitmapDrawable(getResources(), bm); 
} 

Как сохранить тексты на растровые изображения для каждого щелчка. Каждый раз, когда предыдущий текст заменяется последним?

ответ

0

Каждый раз, когда вы звоните writeTextOnDrawable(), вы возвращаете новый Drawable, поэтому предыдущий отбрасывается. Вы должны иметь функцию, где вы можете передать существующий Drawable в качестве ссылки, как так:

private BitmapDrawable writeTextOnDrawable(BitmapDrawable existingDrawable, int drawableId, String text,float xPos,float yPos) 
{ 
Bitmap bm; 
if (existingDrawable == null) { 
    bm = BitmapFactory.decodeResource(getResources(), drawableId).copy(Bitmap.Config.ARGB_8888, true); 
} else { 
    bm = existingDrawable.getBitmap(); 
} 
Typeface tf = Typeface.create("Helvetica", Typeface.BOLD); 
Paint paint = new Paint(); 
paint.setStyle(Style.FILL); 
paint.setColor(Color.RED); 
paint.setTypeface(tf); 
paint.setTextAlign(Align.CENTER); 
paint.setTextSize(11); 
Rect textRect = new Rect(); 
paint.getTextBounds(text, 0, text.length(), textRect); 
Canvas canvas = new Canvas(bm); 
canvas.drawText(text, xPos, yPos, paint); 
return new BitmapDrawable(getResources(), bm); 
} 

Заметим, однако, что это будет просто написать текст поверх существующего, потому что paint.getTextBounds(text, 0, text.length(), textRect); остается тем же самым. Вы должны будете сами это контролировать, если хотите, чтобы новый текст был помещен под существующий.

+0

Можете ли вы предложить, как определить existingDrawable в моем классе активности, если у меня есть res id? Я ищу пример реализации. – andromania

+0

У вас это уже есть. Это ваш 'myDrawable', который вы можете просто передать как параметр функции, которую я разделял. – Anyonymous2324

+0

Вы имели в виду вот так? myDrawabletest = writeTextOnDrawable ((BitmapDrawable) myDrawable, R.drawable.pic2, value.toString(), touchxpos, touchypos); Проблема заключается в том, что myDrawable имеет тип Drawable, а не BitmapDrawable.So он не работает. Тип литья не помогает. – andromania