2017-08-19 19 views
0

Dans mon projet, j'ai un EditText un TextView et un ImageView. J'affiche dans le TextView et dans l'Image View ce que l'utilisateur a saisi dans le EditText. c'est le code: ""textview.getDrawingCache() ne fonctionne pas correctement

public class MainActivity extends AppCompatActivity{ 
    private TextView textView; 
    private EditText editText; 
    private ImageView imageView; 

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 


textView= (TextView) findViewById(R.id.flip); 
imageView= (ImageView) findViewById(R.id.iv_text_to_image); 
editText= (EditText) findViewById(R.id.original); 

textView.setText("Hello World"); 
textView.setDrawingCacheEnabled(true); 
textView.buildDrawingCache(); 

imageView.setImageBitmap(textView.getDrawingCache()); 



editText.addTextChangedListener(new TextWatcher() { 
      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
      } 
      @Override 
      public void onTextChanged(CharSequence s, int start, int before, int count) { 
       //s = "."+s; 
       textView.setText(s); 
       imageView.setImageBitmap(textView.getDrawingCache()); 
      } 

      @Override 
      public void afterTextChanged(Editable s) { 
      } 
     }); 
} 
} 

Le code parfois ça marche, mais pas tout à fait, par exemple, si je décommenter les s = + s; cela fonctionne mais ne montre pas dans le ImageView le dernier caractère entré. Si je supprime cette ligne, les résultats sont inattendus, cela dépend beaucoup de votre type. Si au lieu de s = "." + S; Je le change en s = "a" + s; ou une autre lettre comme b ou c etc les résultats sont à nouveau inattendus.

Que pensez-vous qu'il puisse se passer avec .setImageBitmap() et .getDrawingCache()?

Par ailleurs, au début ne montre pas les « Bonjour tout le monde » dans le imageView

Répondre

0

Je l'ai fixé faire ceci:

@Override 
public void onTextChanged(CharSequence s, int start, int before, int count) { 
        textView.setText(s); 
       } 

@Override 
public void afterTextChanged(Editable s) { 

        textView.setDrawingCacheEnabled(true); 
        imageView.setDrawingCacheEnabled(true); 
        // this is the important code :) 
        // Without it the view will have a dimension of 0,0 and the bitmap will be null 
        textView.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), 
          View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)); 
        textView.layout(0, 0, textView.getMeasuredWidth(), textView.getMeasuredHeight()); 
        Bitmap bm2 = textView.getDrawingCache(); 

        if (bm2!=null){ 
         imageView.setImageBitmap(bm); 
        }else{ 
         imageView.setImageBitmap(textView.getDrawingCache()); 
        } 

       } 

J'ai eu l'idée d'ici Android View.getDrawingCache returns null, only null