An ImageView using an alternative to the ScaleType mechanism.
The ScaleType enum constants do not cover all common cases, and the choice of
the right constant (if any) is not always intuitive.
AImageView provides 4 parameters:
xWeightandyWeight(floats in [0;1]) indicate where to bind the image to the component;fitindicates whether the image must fitinsidethe component (by adding margins),outsidethe component (by cropping), alwayshorizontally or alwaysvertically;scaleindicates whether the image can beupscaled and/ordownscaled.
Currently, it always preserves aspect ratio.
<com.rom1v.aimageview.AImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/myimage"
app:xWeight="0.5"
app:yWeight="0.5"
app:fit="inside"
app:scale="downscale|upscale" />Here, the image will fit inside the component (margins will be added if necessary), exactly (downscaling and upscaling are accepted) and will be centered (0.5, 0.5).
Actually, the ScaleType enum constants correspond to specific parameters
values. As you can notice, they do not cover all the combinations, and are not
always explicit…
app:xWeight="0.5"
app:yWeight="0.5"
app:scale="disabled"
// app:fit has no meaning when scale is disabled
app:xWeight="0.5"
app:yWeight="0.5"
app:fit="outside"
app:scale="downscale|upscale"
app:xWeight="0.5"
app:yWeight="0.5"
app:fit="inside"
app:scale="downscale"
app:xWeight="0.5"
app:yWeight="0.5"
app:fit="inside"
app:scale="downscale|upscale"
app:xWeight="1"
app:yWeight="1"
app:fit="inside"
app:scale="downscale|upscale"
app:xWeight="0"
app:yWeight="0"
app:fit="inside"
app:scale="downscale|upscale"
This configuration cannot be reproduced using AImageView parameters, since
this component always preserve aspect ratio.
AImageView extends ImageView and force the scaleType to ScaleType.MATRIX
(to scale and move the image content). Therefore, there is no "equivalent",
AImageView is built upon it.
The library is built using Gradle.
You can build the aar project library using:
./gradlew assembleRelease
It will be generated to library/build/outputs/aar/aimageview.aar.
You can use then use it in your projects.
The easiest way is to import it using Android Studio: File → New module… → Import .JAR or .AAR Project.
You can achieve the same result manually. First, put the aar into
/aimageview/aimageview.aar (from your root project). Then, create
/aimageview/build.gradle, containing:
configurations.create("default")
artifacts.add("default", file('aimageview.aar'))
Finally, declare it in your app dependencies:
dependencies {
compile project(':aimageview')
}
A sample application using it is (as a submodule) is also available:
git clone --recursive http://git.rom1v.com/AImageViewSample.git
cd AImageViewSample
./gradlew assembleDebug # for example
(github mirror)
This library is published under the terms of the GNU/LGPLv3.