繁体   English   中英

EditText更改画布drawText Android

[英]EditText Change Canvas drawText Android

我有一个活动(不是主要活动),该活动具有2个图形,一个edittext字段和一个按钮。

该按钮所要做的就是将用户返回到主要活动。

我希望能够在EditText字段更改时更改文本图形之一。 因此,只要用户在edittext字段中输入文本,图形文本就会立即更改为相同的文本。 目前,只有在我关闭键盘时它才会改变。

这是我的代码

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

        }
    }
}

任何帮助将不胜感激。 谢谢

onTextChanged()而不是afterTextChanged()编写代码, onTextChanged() 如果要在用户输入至少一个字符后更改图形,请使用onTextChanged() 如果要在用户提供任何输入之前更改图形,请使用beforeTextChanged()

相反,在添加代码的afterTextChanged ,将它添加onTextChanged 例如 -

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

由于上面的回答,这就是我使用的解决方案。

无论代码是在afterTextChanged()方法中还是在onTextChanged()中,它实际上都没有任何区别。 与众不同的是demoview.invalidate(); 这刷新了demoview

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

            }

谢谢您的帮助

暂无
暂无

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

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