Я хочу извлечь следующую часть «дисплея» в виде изображения в файл PNG.
<LinearLayout
android:layout_width = "match_parent"
android:layout_height = "match_parent"
android:id = "@+id/Layout">
<FrameLayout xmlns:android = "http://schemas.android.com/apk/res/android"
android:layout_width = "fill_parent"
android:layout_height = "fill_parent">
<ImageView
android:layout_width = "match_parent"
android:layout_height = "fill_parent"
android:id = "@+id/Image_view"
/>
<TextView
android:id = "@+id/text_view1"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
/>
</FrameLayout>
</LinearLayout>
Для этого я использую следующий код
list.add("Raghul s");
list.add("Name 2");
list.add("Name 3");
for(int i=0;i<list.size();i++)
{
LinearLayout view = (LinearLayout) findViewById(R.id.Layout);
txt = (TextView) findViewById(R.id.Text_View1);
txt.setText(list.get(i));
view.setDrawingCacheEnabled(true);
view.buildDrawingCache(true);
Bitmap bitmap = Bitmap.createBitmap(view.getDrawingCache());
view.setDrawingCacheEnabled(false);
bs = new ByteArrayOutputStream();
bs.compress(Bitmap.CompressFormat.PNG, 40, bitmap);
try {
file = new File("Image.png");
file.createNewFile();
ws = new FileOutputStream(file);
ws.write(bs.toByteArray());
ws.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
Когда я выполняю этот код, я получаю изображение PGN, где слово Raghul частично усечено, как на следующем изображении.
Что происходит ?
Почему «Рагул с» и «имя 2» усечены?
Как решить эту проблему?
Привет Рагул, добро пожаловать в переполнение стека. Я "руководитель" и я должен принять ваш вопрос, и я ничего не понимаю в вашем вопросе! Не могли бы вы дать несколько строк вашего кода, ограниченных вашей проблемой, чтобы другие пользователи могли понять вашу проблему и помочь вам. Если чтение части файла не важно, удалите его для объяснения. Что такое «полный макет»? Можете ли вы добавить несколько пустых строк в свой вопрос, чтобы он был более читабельным?
я пытаюсь сохранить макет как изображение, поэтому я упоминаю его как весь макет
Я не понимаю вашу проблему, потому что она плохо объяснена! Пожалуйста, приложите усилия и сделайте то, что я объяснил в своем первом комментарии. Вы уверены, что хотите получить помощь? Следуйте моему совету! Приведите несколько строк кода, чтобы показать, что вы уже работали над этой проблемой. Остальные здесь не для того, чтобы работать у вас дома. Этот сайт действительно отличный и веселый. Если вы разместите какой-нибудь код, я, возможно, смогу понять вашу проблему и помочь вам написать хороший вопрос, помочь вам узнать, как использовать все возможности форматирования StackOverflow.
выше мой код
Хорошо спасибо. Это начало. Теперь вы можете добавить объявление/определение переменной text_View и переменной list? Я продолжаю читать ваш код... Можете ли вы также добавить объявление класса или переменной R? Я вернусь позже
Я также добавил декларации, сэр.
Спасибо. Теперь я отформатировал ваш вопрос, чтобы он был более читабельным для меня, и я надеюсь, что для других. Пожалуйста, я не разработчик Android Java, но я думаю, что ВАШЕ XML-определение LinearLayout и TextView отсутствует в вашем исходном вопросе. Я добавил образец. Можете ли вы снова отредактировать свой вопрос, чтобы правильно заполнить эту часть. Я скрыл ваше объяснение о входном файле и списке строк, потому что вашу проблему можно объяснить без этой части, потому что ваша проблема в другом. В следующий раз, когда вы зададите вопрос, избегайте давать слишком много объяснений, когда в них нет необходимости.
Чтобы поместить изображение, просто вставьте/скопируйте изображение в свой вопрос. Я не знаю, как это делает StackOverflow; но это гениально по сравнению с другими сайтами, которые я знаю.
Извините, но я забыл сказать. Я изменил имена некоторых переменных, чтобы код был короче, чтобы код был более удобочитаемым, а также чтобы избежать путаницы между именем переменной и именем типа переменной. Можете ли вы проверить, всегда ли преобразованный код равен вашему первому опубликованному коду?
Здравствуйте Рагул. Спасибо, я вижу, что вы завершили свой XML-код. Я думаю, что вы также добавили «имя-2», но это не соответствует изображению в вашем вопросе, которое содержит только Rag! Чтобы быть правильным, я предлагаю вам удалить «имя-2» в вашем тексте или добавить «нам» в ваше изображение :-), но не смесь 2.
Теперь, чтобы решить вашу проблему, я предлагаю вам назначить цвет фона для всех элементов в вашем XML-файле. Вы можете использовать следующую страницу, чтобы сделать это stackoverflow.com/questions/5576822/…. Все виджеты, даже LinearLayout, должны иметь свой цвет. Когда это будет сделано, мне интересно посмотреть, что содержит ваш файл PNG. Следующая ссылка, безусловно, может помочь вам найти решение stackoverflow.com/questions/432763/…




Я думаю, что ваша проблема связана с тем, что ширина вашего TextView слишком мала, чтобы полностью отображать ваше имя.
Есть 3 возможности проверить, правильно ли то, что я вижу, или нет.
A. вы удаляете виджет ImageView и заменяете wrap_content в TextView на match_parent
B. вы добавляете следующее свойство в виджет TextView
android:text = "xxxxxxxxxx"
C. вы обновляете LinearLayout с помощью view.invalidate() после назначения TextView с помощью следующего кода:
txt.setText(list.get(i));
view.invalidate();
Я думаю (без тестирования), что последняя команда решит вашу проблему.
Я добавил эту возможность
D. вы можете раскрасить ВСЕ виджеты, присутствующие в LinearLayout, и посмотреть, что произойдет. Сделав это, мы сможем увидеть ширину всех виджетов и, возможно, сможем лучше понять вашу проблему.
Сэр, снова повторяется та же проблема... Пожалуйста, помогите мне с некоторыми другими методами.
Я разработчик C++, Java и VB.Net, и я пытаюсь помочь вам, потому что я уже работал с растровым изображением в C++ и VB.net, и ваша проблема, похоже, связана с тем, что действительно отображается. Я добавил еще одну возможность, чтобы попытаться понять, что происходит, можете ли вы попробовать и отправить мне результат. Я добавляю это сейчас.
Вы пытались раскрасить все свои виджеты?
Хорошо, но не могли бы вы сообщить результат своего вопроса, чтобы мы могли увидеть, что вы получили!
Я понял ... спасибо, сэр, за то, что подали мне идею
Привет, Рагул, ты принял мой ответ как лучший, но мой ответ неполный. Вы нашли решение? Если ДА, можете ли вы объяснить в новом комментарии, как вы решили свою проблему?
Сэр, в текстовом представлении я раньше использовал только «имя». Затем я изменил его на 10 букв, например: «xxxxxxxxxx», вот так я случайно набрал какую-то букву. После этого я понимаю.
Ok. Я вижу, что ваша проблема решена. Но можете ли вы объяснить, почему или как вы ее решили. В StackOverflow важно знать, что происходит, чтобы другие пользователи, столкнувшиеся с той же проблемой, могли использовать ваш вопрос и мой ответ для решения своей проблемы. Вы, безусловно, изменили что-то важное, и только вы знаете, что вы изменили. Можете ли вы найти, что вы изменили, и можете ли вы найти некоторые пояснения для других пользователей?
В Android Studio. Пожалуйста, дайте любой код, чтобы правильно сохранить изображение со всем текстом.