Question

I have to draw a custom shapes inside the ListView rows in android. I found this on web but couldn't succeed. I have a class DrawView.java which makes a rectangle on Canvas and I want the object of this class to be included in my custom ListView rows.

DrawView.java

    package com.example.horizontalscrollview;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.View;

public class DrawView extends View {
    Paint paint = new Paint();

    public DrawView(Context context) {
        super(context);            
    }

    @Override
    public void onDraw(Canvas canvas) {
        paint.setColor(Color.BLACK);
        paint.setStrokeWidth(3);
        canvas.drawRect(30, 30, 180, 180, paint);


    }

}

and my xml file for a row of Custom ListView is

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:layout_margin="60dp"
    android:id="@+id/mainLayout"
     >

     <com.example.horizontalscrollview.DrawView
        android:id="@+id/drawview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true" >
      </com.example.horizontalscrollview.DrawView>

</LinearLayout>

and getView() function of custom Adapter of ListView is:

        public View getView(final int position,  View convertView, final ViewGroup parent) {

        Toast.makeText(c, "Clicked on="+position, 1).show();
        convertView = mInflater.inflate(R.layout.news_list_item,null);
        DrawView rl = (DrawView)convertView.findViewById(R.id.drawview);
        DrawView draw = new DrawView(c);
        rl=draw;
        return convertView;
} 
Was it helpful?

Solution

inflate this xml in your get view method

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
 android:layout_margin="60dp"
android:id="@+id/mainLayout"
 >

 <com.example.horizontalscrollview.DrawView
    android:id="@+id/drawview"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true" >
  </com.example.horizontalscrollview.DrawView>

</LinearLayout> 

here is get view method

 public View getView(final int position,  View convertView, final ViewGroup parent) {

    Toast.makeText(c, "Clicked on="+position, 1).show();
    convertView = mInflater.inflate(R.layout.news_list_item,null);

    return convertView;
} 

it should work fine, if this isn't working please let known the issue :) happy coding

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top