public final class URLImage
- Object
- Image
- EncodedImage
- URLImage
ImplementsActionSource
URLImage allows us to create an image from a URL. If the image was downloaded
already it is fetched from cache; if not it is downloaded optionally scaled/adapted
and placed in cache.
By default an image is fetched lazily as it is asked for by the GUI unless the fetch() method is invoked in which case the IO code is executed immediately.
This sample code show a URLImage that is fetched to the title area background and scaled/cropped
to fit device specific dimensions.
Toolbar.setGlobalToolbar(true);
Form hi = new Form("Toolbar", new BoxLayout(BoxLayout.Y_AXIS));
EncodedImage placeholder = EncodedImage.createFromImage(Image.createImage(hi.getWidth(), hi.getWidth() / 5, 0xffff0000), true);
URLImage background = URLImage.createToStorage(placeholder, "400px-AGameOfThrones.jpg",
"http://awoiaf.westeros.org/images/thumb/9/93/AGameOfThrones.jpg/400px-AGameOfThrones.jpg");
background.fetch();
Style stitle = hi.getToolbar().getTitleComponent().getUnselectedStyle();
stitle.setBgImage(background);
stitle.setBackgroundType(Style.BACKGROUND_IMAGE_SCALED_FILL);
stitle.setPaddingUnit(Style.UNIT_TYPE_DIPS, Style.UNIT_TYPE_DIPS, Style.UNIT_TYPE_DIPS, Style.UNIT_TYPE_DIPS);
stitle.setPaddingTop(15);
SpanButton credit = new SpanButton("This excerpt is from A Wiki Of Ice And Fire. Please check it out by clicking here!");
credit.addActionListener((e) -> Display.getInstance().execute("http://awoiaf.westeros.org/index.php/A_Game_of_Thrones"));
hi.add(new SpanLabel("A Game of Thrones is the first of seven planned novels in A Song of Ice and Fire, an epic fantasy series by American author George R. R. Martin. It was first published on 6 August 1996. The novel was nominated for the 1998 Nebula Award and the 1997 World Fantasy Award,[1] and won the 1997 Locus Award.[2] The novella Blood of the Dragon, comprising the Daenerys Targaryen chapters from the novel, won the 1997 Hugo Award for Best Novella. ")).
add(new Label("Plot introduction", "Heading")).
add(new SpanLabel("A Game of Thrones is set in the Seven Kingdoms of Westeros, a land reminiscent of Medieval Europe. In Westeros the seasons last for years, sometimes decades, at a time.\n\n" +
"Fifteen years prior to the novel, the Seven Kingdoms were torn apart by a civil war, known alternately as \"Robert's Rebellion\" and the \"War of the Usurper.\" Prince Rhaegar Targaryen kidnapped Lyanna Stark, arousing the ire of her family and of her betrothed, Lord Robert Baratheon (the war's titular rebel). The Mad King, Aerys II Targaryen, had Lyanna's father and eldest brother executed when they demanded her safe return. Her second brother, Eddard, joined his boyhood friend Robert Baratheon and Jon Arryn, with whom they had been fostered as children, in declaring war against the ruling Targaryen dynasty, securing the allegiances of House Tully and House Arryn through a network of dynastic marriages (Lord Eddard to Catelyn Tully and Lord Arryn to Lysa Tully). The powerful House Tyrell continued to support the King, but House Lannister and House Martell both stalled due to insults against their houses by the Targaryens. The civil war climaxed with the Battle of the Trident, when Prince Rhaegar was killed in battle by Robert Baratheon. The Lannisters finally agreed to support King Aerys, but then brutally... ")).
add(credit);
ComponentAnimation title = hi.getToolbar().getTitleComponent().createStyleAnimation("Title", 200);
hi.getAnimationManager().onTitleScrollAnimation(title);
hi.show();
This sample code shows the usage of the nestoria API to fill out an infinitely scrolling list in it
we use URLImage to fetch the icon.
Form hi = new Form("InfiniteScrollAdapter", BoxLayout.y());
Style s = UIManager.getInstance().getComponentStyle("MultiLine1");
FontImage p = FontImage.createMaterial(FontImage.MATERIAL_PORTRAIT, s);
EncodedImage placeholder = EncodedImage.createFromImage(
p.scaled(p.getWidth() * 3, p.getHeight() * 3),
false);
InfiniteScrollAdapter.createInfiniteScroll(hi.getContentPane(), () -> {
MultiButton[] cmps = new MultiButton[10];
for (int i = 0; i < cmps.length; i++) {
String imageKey = "listing-" + i;
String imageUrl = "https://example.com/images/" + i + ".png";
MultiButton row = new MultiButton("Listing " + i);
row.setIcon(URLImage.createToStorage(placeholder, imageKey, imageUrl));
cmps[i] = row;
}
InfiniteScrollAdapter.addMoreComponents(hi.getContentPane(), cmps, true);
}, true);
hi.show();
You can use adapters with masks using syntax similar to this to create a round image mask for a URLImage:
Image roundMask = Image.createImage(placeholder.getWidth(), placeholder.getHeight(), 0xff000000);
Graphics gr = roundMask.getGraphics();
gr.setColor(0xffffff);
gr.fillArc(0, 0, placeholder.getWidth(), placeholder.getHeight(), 0, 360);
URLImage.ImageAdapter ada = URLImage.createMaskAdapter(roundMask);
Image i = URLImage.createToStorage(placeholder, "fileNameInStorage", "http://xxx/myurl.jpg", ada);
Nested types
interface URLImage.RequestDecorator | Decorator hook applied to the ConnectionRequest that loads a network-backed URLImage. |
interface URLImage.ErrorCallback | Invoked in a case of an error |
interface URLImage.ImageAdapter | Allows applying resize logic to downloaded images you can use constant resize behaviors defined in this class. |
Fields
public static final int FLAG_RESIZE_FAIL = 3 | Flag used by java.lang.String, com.codename1.ui.Image, int). |
public static final URLImage.ImageAdapter RESIZE_FAIL | Will fail if the downloaded image has a different size from the placeholder image |
public static final int FLAG_RESIZE_SCALE = 1 | Flag used by java.lang.String, com.codename1.ui.Image, int) Equivalent to #RESIZE_SCALE. |
public static final URLImage.ImageAdapter RESIZE_SCALE | Scales the image to match the size of the new image exactly |
public static final int FLAG_RESIZE_SCALE_TO_FILL = 2 | Flag used by java.lang.String, com.codename1.ui.Image, int). |
public static final URLImage.ImageAdapter RESIZE_SCALE_TO_FILL | Scales the image to match to fill the area while preserving aspect ratio |
Methods
Inherited methods
From EncodedImage
createMulti, createFromImage, createFromRGB, create, create, create, create, create, resetCache, dispose, isDisposed, getImage, isLocked, asyncLock, subImage, rotate, modifyAlpha, modifyAlpha, getGraphics, getWidth, getHeight, drawImage, drawImage, toRGB, scaledWidth, scaledHeight, scaledSmallerRatio, scaledEncoded, scaled, scale, isOpaque
From Image
isSimdOptimizationsEnabled, setSimdOptimizationsEnabled, resetSimdOptimizationsEnabled, isSVGSupported, createSVG, createIndexed, createImage, createImage, createImage, createImage, createImage, isAlphaMutableImageSupported, createImage, createImage, exifRotation, exifRotation, exifRotation, getExifOrientationTag, getExifOrientationTag, isJPEG, isPNG, getSVGDocument, isSVG, createMask, applyMask, applyMask, applyMaskAutoScale, mirror, modifyAlphaWithTranslucency, getRGB, getRGB, getRGBCached, scaledLargerRatio, fill, getImageName, setImageName, rotate90Degrees, rotate180Degrees, rotate270Degrees, flipHorizontally, flipVertically, addActionListener, removeActionListener, fireChangedEvent
Field details
FLAG_RESIZE_FAIL
public static final int FLAG_RESIZE_FAIL = 3java.lang.String, com.codename1.ui.Image, int).
Equivalent to #RESIZE_FAILRESIZE_FAIL
public static final URLImage.ImageAdapter RESIZE_FAILFLAG_RESIZE_SCALE
public static final int FLAG_RESIZE_SCALE = 1java.lang.String, com.codename1.ui.Image, int)
Equivalent to #RESIZE_SCALE.RESIZE_SCALE
public static final URLImage.ImageAdapter RESIZE_SCALEFLAG_RESIZE_SCALE_TO_FILL
public static final int FLAG_RESIZE_SCALE_TO_FILL = 2java.lang.String, com.codename1.ui.Image, int).
Equivalent to #RESIZE_SCALE_TO_FILL.RESIZE_SCALE_TO_FILL
public static final URLImage.ImageAdapter RESIZE_SCALE_TO_FILLMethod details
setDefaultRequestDecorator
public static void setDefaultRequestDecorator(URLImage.RequestDecorator decorator)RequestDecorator. Pass null to clear the
existing default. The decorator runs on every URLImage’s
ConnectionRequest immediately before it’s queued.getDefaultRequestDecorator
public static URLImage.RequestDecorator getDefaultRequestDecorator()#setDefaultRequestDecorator(RequestDecorator), or null.setDefaultBearerToken
public static void setDefaultBearerToken(String token)Convenience for the most common case: every URLImage fetch should
carry the same Authorization: Bearer <token> header. Equivalent
to setDefaultRequestDecorator(req -> req.addRequestHeader( "Authorization", "Bearer " + token)).
Pass null to clear. Subsequent calls replace the previously-set
header value; the same Authorization header is not appended
twice.
getExceptionHandler
public static URLImage.ErrorCallback getExceptionHandler()Returns
setExceptionHandler
public static void setExceptionHandler(URLImage.ErrorCallback aExceptionHandler)Parameters
aExceptionHandlerURLImage.ErrorCallback- the exceptionHandler to set
createMaskAdapter
public static URLImage.ImageAdapter createMaskAdapter(Image imageMask)Creates an adapter that uses an image as a Mask, this is roughly the same as SCALE_TO_FILL with the exception that a mask will be applied later on. This adapter requires that the resulting image be in the size of the imageMask!
See the sample usage code below that implements a circular image masked downloader:
Image roundMask = Image.createImage(placeholder.getWidth(), placeholder.getHeight(), 0xff000000);
Graphics gr = roundMask.getGraphics();
gr.setColor(0xffffff);
gr.fillArc(0, 0, placeholder.getWidth(), placeholder.getHeight(), 0, 360);
URLImage.ImageAdapter ada = URLImage.createMaskAdapter(roundMask);
Image i = URLImage.createToStorage(placeholder, "fileNameInStorage", "http://xxx/myurl.jpg", ada);
Parameters
imageMaskImage- the mask image see the createMask() method of image for details of what a mask is, it will be used as the reference size for the image and resulting images must be of the same size!
Returns
createMaskAdapter
public static URLImage.ImageAdapter createMaskAdapter(Object mask)createToStorage
public static URLImage createToStorage(EncodedImage placeholder, String storageFile, String url)Parameters
placeholderEncodedImage- the image placeholder is shown as the image is loading/downloading and serves as the guideline to the size of the downloaded image.
storageFileString- the file in storage to which the image will be stored
urlString- the url from which the image is fetched
Returns
createToStorage
public static URLImage createToStorage(EncodedImage placeholder, String storageFile, String url, URLImage.ImageAdapter adapter)Parameters
placeholderEncodedImage- the image placeholder is shown as the image is loading/downloading and serves as the guideline to the size of the downloaded image.
storageFileString- the file in storage to which the image will be stored
urlString- the url from which the image is fetched
adapterURLImage.ImageAdapter- the adapter used to adapt the image into place, it should scale the image if necessary
Returns
createToStorage
public static URLImage createToStorage(EncodedImage placeholder, String storageFile, String url, URLImage.ImageAdapter adapter, URLImage.RequestDecorator decorator)Same as #createToStorage(EncodedImage, String, String, ImageAdapter),
plus a per-call RequestDecorator applied to the
ConnectionRequest that fetches the image bytes. Use when the URL
requires authentication, custom headers, or other
ConnectionRequest configuration not covered by the default.
If a global default decorator is also installed via
#setDefaultRequestDecorator(RequestDecorator), the global default
runs first, then the per-call decorator – so the per-call decorator
can override headers set by the default.
createToFileSystem
public static URLImage createToFileSystem(EncodedImage placeholder, String file, String url, URLImage.ImageAdapter adapter)Parameters
placeholderEncodedImage- the image placeholder is shown as the image is loading/downloading and serves as the guideline to the size of the downloaded image.
fileString- the file in the file system to which the image will be stored
urlString- the url from which the image is fetched
adapterURLImage.ImageAdapter- the adapter used to adapt the image into place, it should scale the image if necessary
Returns
createCachedImage
public static Image createCachedImage(String imageName, String url, Image placeholder, int resizeRule)FileSystemStorage#hasCachesDir(), this will call java.lang.String, java.lang.String, com.codename1.ui.URLImage.ImageAdapter)
with a file location in the caches directory. In all other cases, this will call java.lang.String, java.lang.String).Parameters
imageNameString- The name of the image.
urlString- the URL from which the image is fetched
placeholderImage- the image placeholder is shown as the image is loading/downloading and serves as the guideline to the size of the downloaded image.
resizeRuleint- One of
#FLAG_RESIZE_FAIL,#FLAG_RESIZE_SCALE, or#FLAG_RESIZE_SCALE_TO_FILL.
Returns
fetch
public void fetch()getInternal
protected Image getInternal()Returns
requiresDrawImage
public boolean requiresDrawImage()Returns
getImageData
public byte[] getImageData()Returns
animate
public boolean animate()Returns
true if the animation state changed.lock
public void lock()unlock
public void unlock()isAnimation
public boolean isAnimation()