Создать растровое изображение из EditText и его содержание - PullRequest
9 голосов
/ 14 октября 2011

У меня есть простой EditText внутри Activity, и я хочу создать Bitmap изображение из этих EditText и content of the EditText. Image должен выглядеть так же, как EditText и его content.

Here is how I want the Image should look like, хотя это EditText, но я хочу растровое изображение, которое должно выглядеть так же, как это. Итак, как мне этого добиться? Любая идея была бы отличной.

enter image description here

Это мой код,

public class EditTextPinchZoomActivity extends Activity {

    EditText editText;
    ImageView imageView;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        imageView = (ImageView) findViewById(R.id.image_view);
        editText = (EditText) findViewById(R.id.edit_text);
        editText.buildDrawingCache();
    }

    public void myOnClick(View view) {

        switch (view.getId()) {
        case R.id.btn:
            imageView.setImageBitmap(editText.getDrawingCache());

            break;
        default:
            break;
        }
    }
}

Ответы [ 2 ]

12 голосов
/ 14 октября 2011

Вы можете получить растровое изображение, построив кэш чертежа.Это должно сработать.

EditText edit = (EditText)findViewById(R.id.edit);
edit.buildDrawingCache();
ImageView img = (ImageView)findViewById(R.id.test);
img.setImageBitmap(edit.getDrawingCache());

Lalit, когда вы пытаетесь построить кэш в методе onCreate, рисование еще не произошло, поэтому drawCache не должен иметь ничего.Либо поместите метод buildDrawingChache в метод onClick.Или используйте следующий код в onCreate.

ViewTreeObserver vto = editText.getViewTreeObserver(); 
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
    @Override 
    public void onGlobalLayout() {
        editText.buildDrawingCache();
        } 
});

Но я думаю, что построение кеша в методе onClick будет правильным, поскольку к тому времени экран будет прорисован.И еще одна вещь, которую я запомнил: если вы вводите текст после onCreate, то вы должны построить кеш после этого.Поэтому попробуйте первый метод.

ViewTreeObserver

Это глобальный прослушиватель компоновки для представления или группы просмотра, который продолжает вызываться при любых изменениях компоновки.Я обычно использую это в тех случаях, когда мне нужно получить ширину и высоту представлений в методе onCreate.Без этого значение всегда будет равно 0, поскольку рисование или измерение не проводились.

Предположим, у вас было требование постоянно обновлять ваше изображение-вид текста редактирования при вводе, вы можете использовать это и просто удалить первую строку, где я удаляю слушателя.Слушатель будет вызываться для каждого введенного вами символа, даже если курсор мигает.

3 голосов
/ 14 октября 2011

Используйте любую ViewGroup для получения растрового изображения:

FrameLayout frame = (FrameLayout) findByViewId(R.id.FrameLayout);  
frame.addView(your edittext object);//add on your layout design
frame.setDrawingCacheEnabled(true);
Bitmap bmp = frame.getDrawingCache();

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...