GithubHelp home page GithubHelp logo

materialleanback's Introduction

MaterialLeanBack

A beautiful leanback port for Smartphones and Tablets

Android app on Google Play

screen

Sample

Android app on Google Play

gif

Usage

In your layout

<com.github.florent37.materialleanback.MaterialLeanBack
        android:id="@+id/materialLeanBack"
        android:layout_width="match_parent"
        android:layout_height="match_parent"

        app:mlb_background="@color/background"
        app:mlb_lineSpacing="30dp"

        app:mlb_paddingBottom="30dp"
        app:mlb_paddingLeft="30dp"
        app:mlb_paddingRight="30dp"
        app:mlb_paddingTop="40dp"

        app:mlb_titleColor="@android:color/white" />

And in your activity/fragment

materialLeanBack.setAdapter(new MaterialLeanBack.Adapter<TestViewHolder>() {
            @Override
            public int getLineCount() {
                return 10;
            }

            @Override
            public int getCellsCount(int line) {
                return 10;
            }

            @Override
            public TestViewHolder onCreateViewHolder(ViewGroup viewGroup, int line) {
                View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.cell_test, viewGroup, false);
                return new TestViewHolder(view);
            }

            @Override
            public void onBindViewHolder(TestViewHolder viewHolder, int i) {
                viewHolder.textView.setText("test " + i);

                String url = "http://www.lorempixel.com/40" + viewHolder.row + "/40" + viewHolder.cell + "/";
                Picasso.with(viewHolder.imageView.getContext()).load(url).into(viewHolder.imageView);
            }

            @Override
            public String getTitleForRow(int row) {
                return "Line " + row;
            }
            
            @Override
            public int getEnlargedItemPosition(int position) {

                Toast.makeText(MainActivity.this,String.valueOf(position),Toast.LENGTH_LONG).show();

                return super.getEnlargedItemPosition(position);
            }

        });

Available attributes

<com.github.florent37.materialleanback.MaterialLeanBack
        android:id="@+id/materialLeanBack"
        android:layout_width="match_parent"
        android:layout_height="match_parent"

        app:mlb_lineSpacing="30dp"

        app:mlb_paddingTop="40dp"
        app:mlb_paddingBottom="30dp"
        app:mlb_paddingLeft="30dp"
        app:mlb_paddingRight="30dp"

        app:mlb_background="@color/background"
        app:mlb_backgroundOverlay="0.5"
        app:mlb_backgroundOverlayColor="#333"

        app:mlb_titleColor="@android:color/white"
        app:mlb_titleSize="15sp"

        app:mlb_overlapCards="true"
        app:mlb_animateCards="true"
        app:mlb_cardElevationEnlarged="10"
        app:mlb_cardElevationReduced="5"
        />

Add custom views

materialLeanBack.setAdapter(new MaterialLeanBack.Adapter<TestViewHolder>() {

    ...usual methods...

    public RecyclerView.ViewHolder getCustomViewForRow(ViewGroup viewgroup, int row) {
        if (row == 3) {
            View view = LayoutInflater.from(viewgroup.getContext()).inflate(R.layout.header, viewgroup, false);
            return new RecyclerView.ViewHolder(view) {
            };
        } else
            return null;
    }

    @Override
    public boolean isCustomView(int row) {
        return row == 3;
    }

    @Override
    public void onBindCustomView(RecyclerView.ViewHolder viewHolder, int row) {
        super.onBindCustomView(viewHolder, row);
    }
}

Download

Buy Me a Coffee at ko-fi.com

In your module Download

compile 'com.github.florent37:materialleanback:1.0.2'

compile 'com.android.support:cardview-v7:22.2.1'
compile 'com.android.support:recyclerview-v7:22.2.1'
compile 'com.nineoldandroids:library:2.4.0'

Credits

Author: Florent Champigny

Android app on Google Play Follow me on Google+ Follow me on Twitter Follow me on LinkedIn

License

Copyright 2015 florent37, Inc.

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.

materialleanback's People

Contributors

bryant1410 avatar florent37 avatar skytreasure avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

materialleanback's Issues

OnItemClickListener to get row & column no.

Hi florent37,

Thanks for this awesome library but I'm having an issue with implementing the item click listener for this view. I have tried modifying the adapter but with that I am only being able to fetch either row no or column no at once. Without the click functionality it only looks like a gallery.

Attempt to invoke virtual method 'int java.lang.Integer.intValue()' on a null object reference

  • Followed every step but still getting this exception
Attempt to invoke virtual method 'int java.lang.Integer.intValue()' on a null object reference

E/AndroidRuntime( 5763): java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.Integer.intValue()' on a null object reference
E/AndroidRuntime( 5763):    at com.github.florent37.materialleanback.line.LineAdapter.onCreateViewHolder(LineAdapter.java:53)
E/AndroidRuntime( 5763):    at android.support.v7.widget.RecyclerView$Adapter.createViewHolder(RecyclerView.java:5779)
E/AndroidRuntime( 5763):    at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5003)
E/AndroidRuntime( 5763):    at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4913)
E/AndroidRuntime( 5763):    at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2029)
E/AndroidRuntime( 5763):    at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1414)
E/AndroidRuntime( 5763):    at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1377)
E/AndroidRuntime( 5763):    at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:578)
E/AndroidRuntime( 5763):    at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3260)
E/AndroidRuntime( 5763):    at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3069)
E/AndroidRuntime( 5763):    at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3518)

Update Adapter

Is there any method to update adapter just like in recyclerview adapter we have notifyDataSetChanged();
method to update a particular row item?

Taking All the screen space

Even If I am using android:layout_height = wrap_content
and only one row (The problem is still there count -2 )
its taking entire space of the screen

Improper implementation

The cells and lines that appear are two less than what was declared in MaterialLeanBack.Adapter.getCellsCount() and MaterialLeanBack.Adapter.getLineCount()

Last Item in a row doesn't get hovered

When scrolling through a row with multiple items the last card doesn't get hovered.
As because the first one does, I'm assuming actually the last one should do so, too.

Can you please take a look at it @florent37 ?

Support RTL

How can i set RTL for this great library?
i want set scroll RTL.

how can i it?

Line title

putting line value to null or change it's color to transparent are solutions to disable title, but it will be more useful if we get a property to enable or disable title for the line .

Data binding

hello, i wanted to do something like nested recyclerview and then i found this library.
I am creating an android application based on this project.

but i m stuck at this :

String url = "http://www.lorempixel.com/40" + viewHolder.row + "/40" + viewHolder.cell + "/";
Picasso.with(viewHolder.imageView.getContext()).load(url).into(viewHolder.imageView);

how can i bind arrays of images in this?

listImages1["path1", "path2", "path3", "path4"]
listImages2["samplePath1", "samplePath2", "samplePath3", "samplePath4"]
listImages3["tempPath5", "tempPath6", "tempPath7", "tempPath8"]

A little help will solve my issue... :)

wrong row count

when trying to return one or tow rows it returns nothing
yet if i returned 3 rows it returns 1 row only
if i returned 4 rows it returns 2 rows
it returns the rows count - 2
same for the cell count
it returns the count - 2

One Row

it seems that returning line count to 1 doesn't work ?
it goes from item 0 to item 9 -> 10 elements ?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.