2016-10-28 11 views
0

私は2つのグラフィックス、edittextフィールド、およびボタンを持つアクティビティ(メインアクティビティではありません)を持っています。EditTextキャンバスのdrawTextを変更します。

すべてのボタンは、ユーザーをメインアクティビティに戻します。

EditTextフィールドが変更されたときに、テキストグラフィックスのいずれかを変更したいと考えています。したがって、ユーザがedittextフィールドにテキストを入力するたびに、グラフィックテキストは同じ瞬時に変化します。現在のところ、キーパッドを閉じると変更されるだけです。

HERESに私のコード

public class ThirdActivity extends AppCompatActivity { 


    private DemoView demoview; 
    private EditText editText; 
    private String graphicText = "blank"; 
    private Paint paint; 

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


     demoview = new DemoView(this); 

     Button button = (Button) findViewById(R.id.thirdActButton); 
     button.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View view) { 
       onButtonPress(); 
      } 
     }); 

     editText = (EditText) findViewById(R.id.thirdActEditText); 
     editText.addTextChangedListener(new TextWatcher() { 
      @Override 
      public void onTextChanged(CharSequence s, int start, int before, int count) { 

      } 

      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count, 
              int after) { 

      } 

      @Override 
      public void afterTextChanged(Editable s) { 
       if (!editText.getText().toString().equalsIgnoreCase("")){ 
        graphicText = editText.getText().toString(); 
        Log.d("MyApp",graphicText); 
       } 
      } 
     }); 

     LinearLayout v = (LinearLayout) findViewById(R.id.linearlayout); 
     v.addView(demoview); 

    } 

    private class DemoView extends View{ 
     public DemoView(Context context){ 
      super(context); 
     } 

     @Override protected void onDraw(Canvas canvas) { 
      super.onDraw(canvas); 

      paint = new Paint(); 

      // draw some text using STROKE style 
      paint.setStyle(Paint.Style.FILL_AND_STROKE); 
      paint.setStrokeWidth(5); 
      paint.setColor(Color.BLUE); 
      paint.setTextSize(100); 
      canvas.drawText("Graphic", 75, 75, paint); 

      // draw some text using FILL style 
      paint.setStyle(Paint.Style.FILL); 
      paint.setColor(Color.RED); 
      paint.setTextSize(75); 
      canvas.drawText(graphicText, 150, 210, paint); 

     } 
    } 
} 

任意の助けをいただければ幸いです。 ありがとう

答えて

1

afterTextChanged()の代わりにonTextChanged()にコードを書き込んでください。ユーザーが少なくとも1文字を入力した後でグラフィックスを変更する場合は、onTextChanged()を使用します。ユーザーが入力を与える前にグラフィックスを変更する場合は、beforeTextChanged()を使用します。

0

afterTextChangedにコードを追加する代わりに、onTextChangedにコードを追加してください。たとえば、 -

+1

もdemoview.invalidate() 'その新しい値にgraphicTextを設定した後、それだけに起こっていない場合は、カスタムビュー自体を再描画することを確認するために'を呼び出すの助けを

@Override public void onTextChanged(CharSequence s, int start, int before, int count) { if (!editText.getText().toString().equalsIgnoreCase("")){ graphicText = editText.getText().toString(); Log.d("MyApp",graphicText); //refreshes the demoview so it will change instantly demoview.invalidate(); } } 

感謝をリフレッシュgraphicTextの値を変更し、再描画をトリガーする何かを待つ –

+0

ジョーダルが働いてくれてありがとう。 – Swannie

0

これは私が使用した解決策のおかげです。

コードがafterTextChanged()メソッドであったかonTextChanged()であったかは実際には違いがありませんでした。違いがあったのはdemoview.invalidate()でした。これはdemoviewに

関連する問題