0

我有一個DrawView.java類,它繪製了一個矩形,我想創建一個矩形的ListView。我試圖在List適配器的getView()方法中繪製矩形,但是我失敗了。如何構建自定義ListView,其中每一行都有矩形和圓圈

任何人都可以幫助我解決這個問題嗎?

我的類,它繪製矩形是:

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); 
     paint.setStrokeWidth(0); 
     paint.setColor(Color.CYAN); 
     canvas.drawRect(33, 60, 177, 177, paint); 
     paint.setColor(Color.YELLOW); 
     canvas.drawRect(33, 33, 177, 60, paint); 

    } 

} 

和我getView()自定義適配器的方法是:

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

     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; 
} 

我的XML文件是news_list_item的:

<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> 
+1

我認爲你需要爲item定義一個佈局。此佈局將包含您的DrawView,並且您將在您的getView方法中充氣佈局 –

+0

@LiemVo我更新了我的getView()函數,但在屏幕上仍然沒有任何東西。你能幫我嗎 – user3265443

+0

請試試這個教程如何爲您的列表視圖的客戶端適配器http://stackoverflow.com/questions/16333754/how-to-customize-listview-using-baseadapter –

回答

1

您需要通過擴展BaseAdapter來創建一個列表適配器。您的getView方法未正確使用convertView參數。我建議你觀看The World of ListView,它涵蓋了正確使用ListView。

UPDATE

  1. 每次不要充氣的佈局;只有當convertView爲null時才這樣做。 ListView的全部重點是在滾動屏幕時回收其視圖。
  2. 我看不到您在getView()中創建DrawView的新實例的理由。它應該在你正在膨脹的XML佈局中。
  3. 聲明r1=draw;不會以任何方式更改行的佈局。您所做的只是將參考r1更改爲指向不同的View對象(新的DrawView),但該視圖實際上並未以任何方式附加到佈局。如果您想將其添加到佈局中,則需要在您打算成爲新DrawView的容器的某個其他視圖上調用addView()

如果您還沒有這樣做,請觀看ListView世界(上面的鏈接),並按照提供的編碼模式。

+0

我更新了自定義適配器的getView()函數。你能幫我嗎,我的屏幕上還沒有收到任何東西。 – user3265443