Как найти андроид ширину холста, прежде чем создавать объект холста? - PullRequest
0 голосов
/ 12 ноября 2018

Я создавал класс printdocumentadapter для генерации PDF для печати. Мне нужно было автоматически рассчитать, сколько страниц мне понадобится, основываясь на моей переменной данных (которая представляет собой просто строку, содержащую тексты). Поэтому мне нужно было узнать ширину и высоту моего холста в пикселях или dp, прежде чем я на самом деле создаю экземпляр объекта canvas в своем методе onwrite. Вот файл класса:

public class CustomPrintDocumentAdapter extends PrintDocumentAdapter {

private Activity cur;

private int pageCount = 1;

private PrintedPdfDocument pdf;

private String data;

private int textSize = 16;

public CustomPrintDocumentAdapter(Activity current, String data){
    this.cur = current;
    this.data = data;
}

@Override
public void onLayout(PrintAttributes oldAttributes, PrintAttributes newAttributes, CancellationSignal cancellationSignal, LayoutResultCallback callback, Bundle extras) {
    pdf = new PrintedPdfDocument(cur,newAttributes);
    if(cancellationSignal.isCanceled()){
        callback.onLayoutCancelled();
    }

    PrintDocumentInfo info = new PrintDocumentInfo.Builder("print_output.pdf").setContentType(PrintDocumentInfo.CONTENT_TYPE_DOCUMENT).setPageCount(pageCount).build();

    callback.onLayoutFinished(info,true);
}

@Override
public void onWrite(PageRange[] pages, ParcelFileDescriptor destination, CancellationSignal cancellationSignal, WriteResultCallback callback) {
    PdfDocument.Page page = pdf.startPage(1);
    drawPage(page);
    pdf.finishPage(page);

    try{
        pdf.writeTo(new FileOutputStream(destination.getFileDescriptor()));
    }catch(IOException ie){
        callback.onWriteFailed(ie.toString());
    }finally{
        pdf.close();
    }

    callback.onWriteFinished(pages);
}

public void drawPage(PdfDocument.Page page){

    Canvas canvas = page.getCanvas();
    TextPaint paint = new TextPaint();
    paint.setColor(Color.BLACK);
    paint.setTextSize(16);
    StaticLayout.Builder.obtain(data,0,data.length(),paint,canvas.getWidth()).build().draw(canvas);

    Log.d("CustomPrintDocumentAdapter","Canvas width in pixels: "+canvas.getWidth());
    //prints D/CustomPrintDocumentAdapter: Canvas width in pixels: 590
    //Canvas width in pixel is 590px????
    //my screen is only 480 pixels wide yet the canvas displayed is smaller than my screen??
}

}

Итак, мой вопрос: как мне найти ширину и высоту моего объекта canvas в пикселях в моем методе onLayout?

Я планирую сделать так, чтобы холст заполнил всю область на бумаге (любого размера).

...