How to have a Fullscreen Background Image (with center-crop) that doesn't Resize
try this LayerDrawable (res/drawable/backlayer.xml):
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
>
<item>
<shape>
<solid android:color="#f00" />
</shape>
</item>
<item>
<bitmap
android:gravity="top" android:src="@drawable/back1">
</bitmap>
</item>
</layer-list>
and set it to your top level layout: android:background="@drawable/backlayer"
UPDATE: try this BitmapDrawadle, set it to top level layout (setBackgroundDrawable()), if simpleMapping == true is good enough you can remove "else" branch:
class D extends BitmapDrawable {
private Matrix mMatrix = new Matrix();
private int moldHeight;
public D(Resources res, Bitmap bitmap) {
super(res, bitmap);
}
@Override
protected void onBoundsChange(Rect bounds) {
if (bounds.height() > moldHeight) {
moldHeight = bounds.height();
Bitmap b = getBitmap();
RectF src = new RectF(0, 0, b.getWidth(), b.getHeight());
RectF dst;
// if simpleMapping is good enough then remove "else" branch and
// declare "dst" as:
// RectF dst = new RectF(bounds);
boolean simpleMapping = true;
if (simpleMapping) {
dst = new RectF(bounds);
} else {
float x = bounds.exactCenterX();
dst = new RectF(x, 0, x, bounds.height());
float scale = bounds.height() / src.height();
float dx = scale * src.width() / 2;
dst.inset(-dx, 0);
}
mMatrix.setRectToRect(src, dst, ScaleToFit.CENTER);
}
}
@Override
public void draw(Canvas canvas) {
canvas.drawColor(0xaa00ff00);
canvas.drawBitmap(getBitmap(), mMatrix, null);
}
}
Android Programming crop background image
There is BitmapDrawable, which allows to do it. First you need to create a drawable resource as follows (let it be a file in the project resources res/drawable/mybg.xml
):
<bitmap
xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/background"
android:gravity="center" />
And then specify it as a background resource in your layout:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="overbit.user.MainActivity"
android:background="@drawable/mybg">
</LinearLayout>
How to set the ScaleType on a LinearLayout's background image
View's background is stretched depending on the size of the View
.
Image scaling is supported by ImageView
, and to use it together with the LinearLayout
you need an additional container, that will overlay the 2 children (e.g. a FrameLayout
):
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/bgapp"
android:scaleType="centerCrop"/>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:gravity="center_horizontal">
...
</LinearLayout>
</FrameLayout>
How to set LinearLayout background image to fill the screen
For this case you have a few drawable folders in which you need to keep images that corresponds to the respective device dimensions.
i.e.
HDPI - have a different resolution image
MDPI,XHDPI,XXHDPI are various types of dpi's used
for further info here is the link where u can get the exact dimensions:
http://developer.android.com/guide/practices/screens_support.html
Android crop background
It appears that such thing is achievable only using the ImageView
and setting the scaleType
parameter accordingly. A quick workaround is to use FrameLayout
and put the ImageView
under another layout with transparent background.
Code:
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/imageView1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"
android:src="@drawable/background" />
</FrameLayout>
Android, XML: Show only portion of image in layout container without altering aspect ratio
Use an ImageView inside the linear layout with width and height match_parent and set the scaleType="centerCrop"
<ImageView
android:src="@drawable/somedrawable"
android:scaleType="centerCrop"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
Related Topics
Error While Running Allure Command Line Generate Command
How to Combine Date and Time into a Single Object
Spring Boot Application Shutdown Immediate After Starting
How to Get Amount of Tens in a Int
How to Evaluate a Math Expression Given in String Form
Rounded Swing Jbutton Using Java
How to Sort Arraylist of Objects by Timestamp and Get Last Five Elements
Java: Print Elements of Array and Insert Line Break
How to Specify the Path for Getresourceasstream() Method in Java
How to Shut Down a Spring Boot Command-Line Application
Statefulbeantocsv With Column Headers
Parsing the Nested Json Array Using Jackson Library in Java
Cannot Get Jedis Connection; Could Not Get a Resource from the Pool
Password Encrypt and Decrypt Using Spring-Security
How to Accept Only Numeric Values in a Jtextfield
Hibernate Error - Querysyntaxexception: Users Is Not Mapped [From Users]