Я успешно установил MuPDF для одного из моих приложений для Android. Но проблемы в том, что при рендеринге я не могу поместить PDF в экран. Может ли кто-нибудь предложить мне, как этого добиться. Благодаря!MuPDF Android Pdf подходит для экрана
ответ
Редактировать метод measureView в ReaderView.java, чтобы стать.
private void measureView(View v) {
// See what size the view wants to be
v.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
// Work out a scale that will fit it to this view
float scale;
if (getWidth()>getHeight())
{
scale = (float)getWidth()/(float)v.getMeasuredWidth();
MIN_SCALE = (float)v.getMeasuredWidth()/(float)getWidth();
MAX_SCALE = MIN_SCALE*5.0f;
}
else
scale = Math.min((float)getWidth()/(float)v.getMeasuredWidth(),
(float)getHeight()/(float)v.getMeasuredHeight());
// Use the fitting values scaled by our current scale factor
v.measure(View.MeasureSpec.EXACTLY | (int)(v.getMeasuredWidth()*scale*mScale),
View.MeasureSpec.EXACTLY | (int)(v.getMeasuredHeight()*scale*mScale));
}
Единственная проблема с этим решением является то, что он не будет правильно отображался первоначальный вид Pdf к новой расчетной шкалы (это оказывается для 1.0f масштаб). Только после выполнения некоторого взаимодействия (касания, панорамирования, масштабирования) он будет отображаться правильно. Любые способы принудительного первоначального рендеринга в новый масштаб? – Bruno
Это старый пост, который не может его бросить снова. – hasan83
с этой страницей изменен размер загрузки слишком большой от вида. здесь метод «measureview» в моем коде:
private void measureView(View v) {
// See what size the view wants to be
v.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
if (!mReflow) {
// Work out a scale that will fit it to this view
float scale = Math.min((float) getWidth()/(float) v.getMeasuredWidth(),
(float) getHeight()/(float) v.getMeasuredHeight());
// Use the fitting values scaled by our current scale factor
v.measure(MeasureSpec.AT_MOST | (int) (v.getMeasuredWidth() * (scale + 0.8f) * mScale),
MeasureSpec.AT_MOST | (int) (v.getMeasuredHeight() * (scale+0.8f) * mScale));
} else {
v.measure(View.MeasureSpec.EXACTLY | (int) (v.getMeasuredWidth()),
View.MeasureSpec.EXACTLY | (int) (v.getMeasuredHeight()));
}
}
это то, что мне нужно, загрузить страницу должно быть выбрано точно в представлении, ботинок с текстом читаемым.
Кроме того, чтобы ответить https://stackoverflow.com/a/21168243/2982225, вы можете вновь сделать вид, добавив следующий код в конце:
requestLayout();
post(this);
снова.
Так полный код выглядит следующим образом (правка коды перед последним комментарием: the accepted answer of this question):
private void measureView(View v) {
// See what size the view wants to be
v.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
// Work out a scale that will fit it to this view
float scale;
if (getWidth()>getHeight())
{
scale = (float)getWidth()/(float)v.getMeasuredWidth();
MIN_SCALE = (float)v.getMeasuredWidth()/(float)getWidth();
MAX_SCALE = MIN_SCALE*5.0f;
}
else
scale = Math.min((float)getWidth()/(float)v.getMeasuredWidth(),
(float)getHeight()/(float)v.getMeasuredHeight());
// Use the fitting values scaled by our current scale factor
v.measure(View.MeasureSpec.EXACTLY | (int)(v.getMeasuredWidth()*scale*mScale),
View.MeasureSpec.EXACTLY | (int)(v.getMeasuredHeight()*scale*mScale));
// last comment
// to force the initial rendering to the new scale
requestLayout();
post(this);
}
Надеется, что это помогает.
Я получал ошибки относительно конечных переменных MAX и MIN, однако я сделал небольшую модификацию для решения @ hassan83. Мое решение тестируется в MuPDF версии 1.9a
private void measureView(View v) {
// See what size the view wants to be
v.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
// Work out a scale that will fit it to this view
float scale;
//landscape orientation
if (getWidth() > getHeight())
{
scale = (float)getWidth()/(float)v.getMeasuredWidth() * (1.0f); //make sure that we fill the page by multiplying with a scale factor of one
}
else
scale = Math.min((float)getWidth()/(float)v.getMeasuredWidth(),
(float)getHeight()/(float)v.getMeasuredHeight());
// Use the fitting values scaled by our current scale factor
v.measure(View.MeasureSpec.EXACTLY | (int)(v.getMeasuredWidth()*scale*mScale),
View.MeasureSpec.EXACTLY | (int)(v.getMeasuredHeight()*scale*mScale));
}
- 1. MuPDF подходит для проблем с экраном android
- 2. Гиперссылка pdf на MUPDF
- 3. MuPDF для android
- 4. Android: imageSwitcher подходит для экрана
- 5. здание MUPDF для Android
- 6. Аннотации pdf с использованием MuPDF на Android
- 7. Компиляция MUPDF 1.7a для android
- 8. Открыть линеаризованный pdf на mupdf в android
- 9. Исключение NullPointer при открытии pdf (MUPDF Android)
- 10. MUPDF UnsupportedOperationException при открытии pdf
- 11. MuPDF гиперссылка clickListener Android
- 12. Формат Android не подходит для экрана
- 13. Android ImageView подходит для экрана onTouch
- 14. Android Stuido не подходит для экрана
- 15. Android textview не подходит для всего экрана
- 16. Iframe подходит для экрана
- 17. Android прозрачный фон для pdf с использованием mupdf
- 18. GridView не подходит для экрана
- 19. Редактирование PDF с помощью MuPDF
- 20. подходит для файла pdf
- 21. Ошибка Android MuPDF
- 22. TextView не подходит для экрана
- 23. Как создать mupdf для android
- 24. Ошибка утечки Mupdf на Android
- 25. Как получить автор pdf-документа с mupdf
- 26. Как получить метаданные PDF с помощью MUPDF
- 27. ошибки при компиляции MuPDF для платформы Android
- 28. Настроить Android MuPDF Reader
- 29. Моно для Android и MuPdf PInvoke
- 30. Подходит для всех размеров экрана
же проблема для меня .. –