page.title=Printing Photos
parent.title=Printing Content
parent.link=index.html

trainingnavtop=true
next.title=Printing HTML Documents
next.link=html-docs.html

@jd:body

<div id="tb-wrapper">
<div id="tb">

<h2>This lesson teaches you to</h2>
<ol>
  <li><a href="#image">Print an Image</a></li>
</ol>

</div>
</div>

<p>
  Taking and sharing photos is one of the most popular uses for mobile devices. If your application
  takes photos, displays them, or allows users to share images, you should consider enabling printing
  of those images in your application. The <a href="{@docRoot}tools/support-library/index.html"
  >Android Support Library</a> provides a convenient function for enabling image printing using a
  minimal amount of code and simple set of print layout options.
</p>

<p>This lesson shows you how to print an image using the v4 support library {@link
  android.support.v4.print.PrintHelper} class.</p>


<h2 id="image">Print an Image</h2>

<p>The Android Support Library {@link android.support.v4.print.PrintHelper} class provides
  a simple way to print of images. The class has a single layout option, {@link
  android.support.v4.print.PrintHelper#setScaleMode setScaleMode()}, which allows you to print with
  one of two options:</p>

<ul>
  <li>{@link android.support.v4.print.PrintHelper#SCALE_MODE_FIT SCALE_MODE_FIT} - This
    option sizes the image so that the whole image is shown within the printable area of the page.
    </li>
  <li>{@link android.support.v4.print.PrintHelper#SCALE_MODE_FILL SCALE_MODE_FILL} - This
    option scales the image so that it fills the entire printable area of the page. Choosing this
    setting means that some portion of the top and bottom, or left and right edges of the image is
    not printed. This option is the default value if you do not set a scale mode.</li>
</ul>

<p>Both scaling options for {@link android.support.v4.print.PrintHelper#setScaleMode
  setScaleMode()} keep the existing aspect ratio of the image intact. The following code example
  shows how to create an instance of the {@link android.support.v4.print.PrintHelper} class, set the
  scaling option, and start the printing process:</p>

<pre>
private void doPhotoPrint() {
    PrintHelper photoPrinter = new PrintHelper(getActivity());
    photoPrinter.setScaleMode(PrintHelper.SCALE_MODE_FIT);
    Bitmap bitmap = BitmapFactory.decodeResource(getResources(),
            R.drawable.droids);
    photoPrinter.printBitmap("droids.jpg - test print", bitmap);
}
</pre>

<p>
  This method can be called as the action for a menu item. Note that menu items for actions that are
  not always supported (such as printing) should be placed in the overflow menu. For more
  information, see the <a href="{@docRoot}design/patterns/actionbar.html">Action Bar</a> design
  guide.
</p>

<p>After the {@link android.support.v4.print.PrintHelper#printBitmap printBitmap()} method is
  called, no further action from your application is required. The Android print user interface
  appears, allowing the user to select a printer and printing options. The user can then print the
  image or cancel the action. If the user chooses to print the image, a print job is created and a
  printing notification appears in the system bar.</p>

<p>If you want to include additional content in your printouts beyond just an image, you must
  construct a print document. For information on creating documents for printing, see the
  <a href="html-docs.html">Printing an HTML Document</a> or
  <a href="custom-docs.html">Printing a Custom Document</a>
  lessons.</p>

