4

How could I create custom ListView like shown in this picture. I know I can make this happen with help of ScrollView and Layouts, but I need to do as a ListView. Each listview item go over each other. enter image description here

fish40
  • 5,738
  • 17
  • 50
  • 69

5 Answers5

3

This may help you List view with custom view items with partially overlaps (Android)

Community
  • 1
  • 1
Hybrid Developer
  • 2,320
  • 1
  • 34
  • 55
2

I have this code like your Requirement. List may overlap by reducing the dividerheight to minus value

enter image description here

<?xml version="1.0" encoding="utf-8"?>

<ListView
    android:id="@+id/list"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:divider="#b5b5b5"
    android:dividerHeight="-5dp"
    android:listSelector="@drawable/list_selector" />

Then add background color to adapter according to the position.

public View getView(int position, View convertView, ViewGroup parent) {
    View vi=convertView;
    if(convertView==null)
        vi = inflater.inflate(R.layout.list_row, null);

    TextView title = (TextView)vi.findViewById(R.id.title); // title
    TextView artist = (TextView)vi.findViewById(R.id.artist); // artist name
    TextView duration = (TextView)vi.findViewById(R.id.duration); // duration
    ImageView thumb_image=(ImageView)vi.findViewById(R.id.list_image); // thumb image

    HashMap<String, String> song = new HashMap<String, String>();

    if(position % 2 ==0){
        vi.setBackgroundResource(R.drawable.listselector_1);
    }else if(position % 3 ==0){
        vi.setBackgroundResource(R.drawable.listselector_2);
    }else{
        vi.setBackgroundResource(R.drawable.listselector_3);
    }

    song = data.get(position);

    // Setting all values in listview
    title.setText(song.get(CustomizedListView.KEY_TITLE));
    artist.setText(song.get(CustomizedListView.KEY_ARTIST));
    duration.setText(song.get(CustomizedListView.KEY_DURATION));
    imageLoader.DisplayImage(song.get(CustomizedListView.KEY_THUMB_URL), thumb_image);
    return vi;
}

Otherwise you can use listselector images also as your requirement

Bebin T.N
  • 2,539
  • 1
  • 24
  • 28
1

Thank you guys for trying help me to solve this issue. I look every answer here and finally get i want. I think it will be better I put my code here so maybe someone it will be helpful. The only difference is that my created listview has also shadow in it.

Here is the code

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                xmlns:my_font="http://schemas.android.com/apk/res/com.Helix.android.SmartBonus"
                android:orientation="vertical"
                android:id="@+id/mainLayout"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:paddingTop="5dp"
                >
    <ImageView
            android:id="@+id/imageview"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/shadow_bg"
            android:visibility="visible"/>

    <RelativeLayout
            android:id="@+id/secondLayout"
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="10dp"
            android:background="@drawable/drop_shadow"
            android:layout_below="@id/imageview">
        <ImageView
                android:id="@+id/companyImageView"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/secret_logo_small"
                android:layout_marginRight="10dp"/>
        <TextView
                android:id="@+id/companyDescription"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_toRightOf="@id/companyImageView"
                android:textColor="@android:color/white"
                android:layout_marginTop="7dp"
                my_font:ttf_name="300"
                android:text="Салон кросаты"/>
        <TextView
                android:id="@+id/companyName"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_toRightOf="@id/companyImageView"
                android:layout_below="@id/companyDescription"
                android:textColor="@android:color/white"
                my_font:ttf_name="300"
                android:text="Secret"/>
        <TextView
                android:id="@+id/companyPercentText"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textColor="@android:color/white"
                android:layout_marginTop="7dp"
                android:textSize="19sp"
                android:layout_marginRight="1dp"
                android:layout_toLeftOf="@+id/companyPercent"
                my_font:ttf_name="700"
                android:text="-20"/>
        <TextView
                android:id="@id/companyPercent"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentRight="true"
                android:textColor="@android:color/white"
                android:layout_marginTop="7dp"
                android:textSize="12sp"
                my_font:ttf_name="300"
                android:text="%"/>
        <ImageView
                android:id="@+id/companyPercentImage"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentRight="true"
                android:layout_below="@id/companyPercent"
                android:layout_marginTop="7dp"
                android:textColor="@android:color/white"
                android:src="@drawable/percentage_devider"/>
        <TextView
                android:id="@+id/companyDistance"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentRight="true"
                android:layout_below="@id/companyPercentImage"
                android:textSize="16dp"
                android:textColor="#A57F1C"
                my_font:ttf_name="300"
                android:text="7m"/>
        <LinearLayout
                android:id="@+id/checkingButton"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_below="@id/companyDistance"
                android:layout_marginTop="10dp"
                android:paddingRight="10dp"
                android:paddingLeft="10dp"
                android:focusable="false"
                android:background="@drawable/green_button_bg"
                android:visibility="gone">
            <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_vertical"
                    android:textSize="16dp"
                    android:textColor="@android:color/white"
                    my_font:ttf_name="300"
                    android:text="Check-in"/>
            <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_vertical"
                    android:textSize="16dp"
                    android:layout_marginLeft="10dp"
                    android:textColor="@color/checkin_point_color"
                    android:layout_weight="1"
                    my_font:ttf_name="300"
                    android:text="@string/ten_point"/>
            <ImageView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_vertical"
                    android:src="@drawable/slak"
                    />
        </LinearLayout>
    </RelativeLayout>
</RelativeLayout>

adapter.

@Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        ViewHolder viewHolder;
        final Discount discount = getItem(i);
        Discount prev_discount = null;
        if (i > 0){
            prev_discount = getItem(i-1);
        }

        if (view == null){
            final LayoutInflater li = (LayoutInflater) mActivity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            view = li.inflate(R.layout.discount_data_item, viewGroup, false);

            viewHolder = new ViewHolder();
            viewHolder.logo = (ImageView)view.findViewById(R.id.companyImageView);
            viewHolder.name = (SmartBonus_TextView)view.findViewById(R.id.companyName);
            viewHolder.description = (SmartBonus_TextView)view.findViewById(R.id.companyDescription);
            viewHolder.percent =  (SmartBonus_TextView)view.findViewById(R.id.companyPercentText);
            viewHolder.distance =  (SmartBonus_TextView)view.findViewById(R.id.companyDistance);
            viewHolder.mainLayout = (RelativeLayout)view.findViewById(R.id.mainLayout);
            viewHolder.secondLayaout = (RelativeLayout)view.findViewById(R.id.secondLayout);

            view.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder) view.getTag();
        }

        if (i == 0){
            viewHolder.mainLayout.setBackgroundColor(android.R.color.transparent);
            setRoundedBackground(viewHolder.secondLayaout, Color.parseColor(discount.getBackgroundColor()));
        } else {
            viewHolder.mainLayout.setBackgroundColor(Color.parseColor(prev_discount.getBackgroundColor()));
            setRoundedBackground(viewHolder.secondLayaout, Color.parseColor(discount.getBackgroundColor()));

        }


        return view;
    }

    private void setRoundedBackground(View view,int color){
        final GradientDrawable gradientDrawable = (GradientDrawable) view.getBackground().mutate();
        gradientDrawable.setColor(color);
        gradientDrawable.invalidateSelf();
    }

Here is the result enter image description here

fish40
  • 5,738
  • 17
  • 50
  • 69
0

You should override getView method.
Sample code:

View getView(int position, View convertView, ViewGroup parent){
    Object data = getItem(positon);
    //usually data object should have type property
    if(data.type == TYPE1){
        return getLayoutInflater().inflate(R.layout.custom_xml1, null);
     }else (data.type == TYPE2){
        return getLayoutInflater().inflate(R.layout.custom_xml2, null);
     }else{
        return getLayoutInflater().inflate(R.layout.custom_xml, null);
     }
};

Note:You should reuse convertView object for performance.

boiledwater
  • 10,372
  • 4
  • 37
  • 38
0

Ok, As I have sort of time I manage to write few steps to achieve your task.

1. Make Custom drawable using xml in drawable folder with top corners have radius..

2. Now in your Listview attributes just define negative divider height 
   Like, android:dividerHeight="-20dp"

3. Set the Custom Drawable as a background of List row in getView().

Also its nice if you able to set color to drawable at dynamically for list row. (In getView() of Custom Adapter).

This what I have achieved from above steps:

enter image description here

user370305
  • 108,599
  • 23
  • 164
  • 151