简体   繁体   English

如何在下次clickevents上显示android bitmapdrawable更改

[英]how to show android bitmapdrawable change on next clickevents

On next click when user inputs text, previous text on image is gone. 当用户输入文本时,在下次单击时,图像上的先前文本消失了。 How to save all text inputs on bitmap drawable on all click events. 如何在所有单击事件上将所有文本输入保存在可绘制的位图上。 Please suggest. 请提出建议。

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);
}

How do i save the texts on bitmapdrawable for each click. 如何为每次点击将文本保存在bitmapdrawable上。 Every time the previous text is getting replaced with latest one?? 每次以前的文本被最新的替换?

Every time you call writeTextOnDrawable() you are returning a new Drawable so the previous one is getting discarded. 每次调用writeTextOnDrawable()您都将返回一个新的Drawable因此前一个将被丢弃。 You need to have a function where you can pass an existing Drawable as reference like so: 您需要具有一个可以在其中传递现有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);
}

Note however that this will just write text over the existing one because the paint.getTextBounds(text, 0, text.length(), textRect); 但是请注意,这将仅在现有的文本上写文本,因为paint.getTextBounds(text, 0, text.length(), textRect); remains the same. 保持原样。 You will need to control that yourself if you want the new text to be put under the existing one. 如果要将新文本放在现有文本下,则需要控制自己。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM