Я пытаюсь отобразить несколько страниц PDF в пользовательском представлении в Xamarin.
public override void Draw( AG.Canvas canvas ) {
base.Draw( canvas );
if( !(Parent is AW.ScrollView p) || pdfRenderer == null )
return;
int topPage = pdfRenderer.PageCount * p.ScrollY / Height;
while( topPage < pdfRenderer.PageCount && topPage * screenPageHeight < p.ScrollY + p.Height ) {
using( var page = pdfRenderer.OpenPage( topPage ) ) {
page.Render( bitmap, null, null, PdfRenderMode.ForDisplay );
page.Close();
}
AG.Rect pageRect = new AG.Rect {
Left = 0,
Top = topPage * screenPageHeight,
Right = Width,
Bottom = (topPage + 1) * screenPageHeight,
};
canvas.DrawBitmap( bitmap, null, pageRect, null );
topPage++;
}
}
В результате получается вывод страницы из последнего цикла, запущенного во всех pageRect.Я могу представить, почему это может произойти, но реальный вопрос заключается в том, как я могу исправить этот код, чтобы рисовать все страницы, не создавая отдельного растрового изображения для каждой страницы.
РЕДАКТИРОВАТЬ.Скриншоты отладчика прилагаются.(На холсте. Точка остановаrawBitmap)
РЕДАКТИРОВАТЬ.Добавлен код Java.Ожидаемый: один красный и один зеленый прямоугольник.Наблюдение: два зеленых свода.
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new TestView());
}
class TestView extends View {
public TestView() {
super(MainActivity.this);
}
Bitmap bmp = Bitmap.createBitmap(600, 200, Bitmap.Config.ARGB_8888);
Paint paint = new Paint();
void FillBitmap(int color) {
Canvas canvas = new Canvas(bmp);
canvas.drawColor(color);
}
protected void onDraw (Canvas canvas) {
FillBitmap(Color.RED);
canvas.drawBitmap(bmp, 60, 120, paint);
FillBitmap(Color.GREEN);
canvas.drawBitmap(bmp, 60, 440, paint);
}
protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec) {
setMeasuredDimension(720, 720);
}
}
}