Android - A layout that arranges its children in relation to a background image

Related tags

Layout ImageLayout
Overview

ImageLayout

A layout that arranges its children in relation to a background image. The layout of each child is specified in image coordinates (pixels), and the conversion to screen coordinates is performed automatically.

The background image is adjusted so that it fills the available space.

For some applications this might be a useful replacement for the now deprecated AbsoluteLayout.

Example Image

Try out the sample application:

Android app on Google Play

Or browse the source code of the sample application for a complete example of use.

Including in your project

If you’re using Eclipse with the ADT plugin you can include ImageLayout as a library project. Just create a new Android project in Eclipse using the library/ folder as the existing source, and add a reference to it to your application project.

If you use gradle to build your Android project you can simply add a dependency for this library:


dependencies {  
    mavenCentral()
    compile 'com.github.manuelpeinado.imagelayout:imagelayout:1.1.0'
}

Usage

Adding to your layout

Add an element named com.manuelpeinado.imagelayout.ImageLayout to your XML layout. This element should have the following attributes:

Attribute Description
custom:image The drawable to be used as the background for the view.
custom:imageWidth
custom:imageHeight
The dimensions of the image in which the layout coordinates of the children are expressed.

In addition, you can use the following optional attributes:

Attribute Description
custom:fit Determines how the background image is drawn. Accepted values are vertical, horizontal, both and auto (the default). Check the "Fit attribute" sample in the demo application to see these different modes in action.

Adding children

You can add child views to your ImageLayout just like you would to any other ViewGroup. But instead of using the android:layout_width and android:layout_height attributes to control the layout of children, you should use the following:

Attribute Description
custom:layout_width
custom:layout_height
Similar to android:layout_width/height, but expressed in image coordinates
custom:layout_maxWidth
custom:layout_maxHeight
Similar to android:layout_maxWidth/maxHeight, but expressed in image coordinates.
custom:layout_centerX
custom:layout_centerY
Center of the child view, in image coordinates.
custom:layout_left
custom:layout_top
custom:layout_right
custom:layout_bottom
Bounds of the child view, in image coordinates.

Note that depending of your application you will use a different combination of these attributes. You might for example specify a value for custom:right in order to align the right side of your view with a given feature of the image, and custom:centerY to align the same view vertically with another feature.

Also note that the size-related attributes such as custom:layout_width are not mandatory. If you don't specify any of them for a given dimension, the view is measured in the traditional "wrap content" fashion.

View size adjustment

You can have your ImageLayout fill its parent by specifying match_parent in both its android:layout_width and android:layout_height attributes. But, since the aspect ratio of the image will typically differ from the aspect of ratio of the parent view, this will result in a waste of screen real state in the form of blank margins around the image.

To prevent this, simply use wrap_content in either android:layout_width or android:layout_height. This will cause the ImageLayout to adopt a size which matches the aspect ratio of its image.

Please note that the result of using wrap_content for both android:layout_width and android:layout_height is unspecified.

Who's using it

Does your app use ImageLayout? If you want to be featured on this list drop me a line.

Developed By

Manuel Peinado Gallego - [email protected]

Follow me on Twitter Follow me on Twitter Follow me on Twitter

License

Copyright 2013 Manuel Peinado

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Comments
  • View does not render in HorizontalScrollView

    View does not render in HorizontalScrollView

    Hi,

    Thanks for this great library!

    I'm having an issue when placing this view inside a horizontalscrollview. The view doesn't render at all. Is there a way to get this to work? Your code is beyond my level of expertise otherwise I would have tried to resolve it.

    Thanks

    opened by RadicalMonkey 2
  • Cannot set bitmap programmatically

    Cannot set bitmap programmatically

    Would it be possible to modify your library to allow the bitmap to be changed programmatically?

    Ive tried adding in the code:

    public void setImageBitmap(Bitmap bitmap){ this.bitmap = bitmap;
    rebuildFitter(); }

    but it doesn't give the result I expected. The image is there but stretched out way out of proportion.

    opened by RadicalMonkey 1
  • Error inflating class

    Error inflating class

    I am using android studio 3 and getting this error Error inflating class com.manuelpeinado.imagelayout.ImageLayout.

    In previous versions, it was working fine.

    opened by mggupta89 0
  • Add the option to set a Bitmap as ImageResource

    Add the option to set a Bitmap as ImageResource

    you have these methods..

        /**
         * Changes the background image and its layout dimensions.
         */
        public void setImageResource(int imageResource, int imageWidth, int imageHeight) {
            bitmap = extractBitmapFromDrawable(getResources().getDrawable(imageResource));
            bitmapSrcRect = bitmapRect(bitmap);
    
            this.imageWidth = imageWidth;
            this.imageHeight = imageHeight;
    
            rebuildFitter();
        }
    
        private static Bitmap extractBitmapFromDrawable(Drawable drawable) {
            return ((BitmapDrawable) drawable).getBitmap();
        }
    

    But you have to pass the image as int from the resources, there's should be a way to set a Bitmap directly as ImageResource, i think it is possible and it is not a big deal, but i want to set it programmatically depending on the situation and it will be very helpful in my needs..

    Great tool, by the way!!

    opened by carlosen14 0
  • android:layout_weight in the ImageLayout  parent View height is avoiding the ImageLayout content from being centered

    android:layout_weight in the ImageLayout parent View height is avoiding the ImageLayout content from being centered

    I found that this library has some issues in what concerns the position of the component when this is inside a ViewPager, for example.

    Applying a layout_weight value to the ViewPager that contains the component (the component is the root on the fragment layout and the Fragment is included on a FragmentStatePagerAdapter) could lead to unkonwn issues. I experienced those issues when the gravity of the component is set to "center" and the fitmode is set to "auto".

    I had to apply a layout_marginLeft value to the ViewPager, because the component wasn't centering on the ViewPager, as we would expect. I played with autofit and gravity values but to no use.

    This would happen and work correctly if the ViewPager had a height set to match_parent.

    It would be great if this issue could be resolved soon.

    Best regards.

    João Amaro

    opened by joao-amaro-bold 0
Owner
Manuel Peinado Gallego
Manuel Peinado Gallego
GoolgePlusLayout is a custom layout that plays animation on the children views while scrolling as the layout in the Google Plus (android) main page

Google Plus Layout Google Plus Layout is a custom layout that support playing animation on child view(s) in a serialize manner like the the main

Ahmed Nammari 224 Nov 25, 2022
An Android layout for arranging children along a circle

CircleLayout An Android layout for arranging children along a circle You can customize the following options: cl_centerView: Set a specific view ID to

Francois Campbell 374 Nov 18, 2022
Linear layout, that wrap its content to the next line if there is no space in the current line.

Android flow layout Introduction Extended linear layout that wrap its content when there is no place in the current line. [] (https://travis-ci.org/Ap

Artem.Votincev 2k Jan 5, 2023
Responsive Layout Gird Configuration using Compose. An adaptive layout

ResponsiveGrid Responsive Grid is most followed layout system by the designer as it adapts to screen size and orientation, ensuring consistency across

null 4 Apr 12, 2022
Extended CoordinatorLayout, that helps creating background galleries

BlurZoomGallery Extended CoordinatorLayout, that helps creating background galleries. Features: expandable Collapsing Toolbar Layout, making space for

Rafał Tułaza 396 May 12, 2022
This assignment gives you basically a post list and its detail with comments.🚀

Android Assignment ?? Description This assignment gives you basically a post list and its detail with comments. ?? Features Users can see random post

Okan AYDIN 31 Dec 20, 2022
An Android Layout which has a same function like https://github.com/romaonthego/RESideMenu

ResideLayout An Android Layout which has a same function like https://github.com/romaonthego/RESideMenu. Can be used on Android 1.6(I haven't try it.)

Yang Hui 392 Oct 12, 2022
A very simple arc layout library for Android

ArcLayout A very simple arc layout library for Android. Try out the sample application on the Play Store. Usage (For a working implementation of this

ogaclejapan 1.4k Dec 26, 2022
Android layout that simulates physics using JBox2D

PhysicsLayout Android layout that simulates physics using JBox2D. Simply add views, enable physics, and watch them fall! See it in action with the sam

John Carlson 689 Dec 29, 2022
An Android demo of a foldable layout implementation. Engineered by Vincent Brison.

Foldable Layout This code is a showcase of a foldable animation I created for Worldline. The code is fully written with java APIs from the Android SDK

Worldline 599 Dec 23, 2022
A 3D Layout for Android,When you use it warp other view,it can became a 3D view,一秒让你的view拥有3D效果!

ThreeDLayout A 3D Layout,When you use it warp other view,it can became a 3D view 中文文档 preview USAGE 1.compile library allprojects { repositories {

androidwing 490 Oct 27, 2022
It's an Android library that allows you to use Layout as RadioButton or CheckBox.

Android - CompoundLayout It's an Android library that allows you to use Layout as RadioButton or CheckBox. The librarie is Android 14+ compatible. Gra

null 483 Nov 25, 2022
A pull to refresh layout for android, the RecyclerRefreshLayout is based on the SwipeRefreshLayout. support all the views, highly customizable, code simplicity, etc. really a practical RefreshLayout!

RecyclerRefreshLayout English | 中文版 RecyclerRefreshLayout based on the {@link android.support.v4.widget.SwipeRefreshLayout} The RecyclerRefreshLayout

dinus_developer 1.7k Nov 10, 2022
Easy, flexible and powerful Swipe Layout for Android

SwipeRevealLayout A layout that you can swipe/slide to show another layout. Demo Overview Drag mode Drag mode normal: Drag mode same_level: Features F

Chau Thai 1.5k Jan 4, 2023
[UNMAINTAINED]: AndroidMosaicLayout is android layout to display group of views as grid consists of different asymmetric patterns (90 different patterns).

AndroidMosaicLayout AndroidMosaicLayout is android layout to display group of views in more that 90 different patterns. What is AndroidMosaicLayout? I

Adham Enaya 474 Nov 12, 2022
Scalable Layout For Android

ScalableLayout for Android. Class: com.ssomai.android.scalablelayout.ScalableLayout 한글버전 README.md: https://github.com/ssomai/ScalableLayout/blob/mast

Youngmann Kim 273 Nov 21, 2022
Circular layout for android

CircleLayout Circular layout for android. Installlation Add CircleLayout as Android Library to your project. How to add project as Android Library Usa

Dmitry Zaytsev 244 Nov 18, 2022
null 2.4k Dec 30, 2022