Как показать Android растровые изменения на следующих кликах
При следующем нажатии, когда пользователь вводит текст, предыдущий текст на изображении исчезает. Как сохранить все текстовые вводы на растровом изображении для всех событий клика. Пожалуйста, предложите.
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);
}
Как сохранить текст на растровом изображении для каждого клика. Каждый раз, когда предыдущий текст заменяется последним??
1 ответ
Каждый раз, когда вы звоните 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);
остается такой же. Вам нужно будет это контролировать самостоятельно, если вы хотите, чтобы новый текст помещался под существующим.