2012-08-22 22 views
0

我正在向Gridview中的屏幕顯示圖像,目前正在使用ImageAdapter將下載的圖像加載到Gridview中。如果點擊,我在所選圖像頂部繪製另一個圖像來表示選擇,問題是我必須通過RelaytiveLayout將它們添加爲孩子,因此當我滾動圖像時,請保留它們的創建位置,並且不要跟隨與滾動。所以我然後嘗試創建一個自定義視圖與2個圖像重疊,設置一個隱藏和另一個由適配器填充。選擇時,計劃是取消隱藏重疊圖像。從適配器加載時,我的自定義視圖(實際上必須擴展ViewGroup以包含兩個圖像視圖,因爲視圖無法添加子視圖)將加載可選擇的框架,但在任何圖像顯示中都是完全透明的。我知道這是可選擇的,因爲當我觸摸屏幕時,我設置的尺寸會出現一個藍色框。爲了顯示自定義視圖,我在publc getView()函數中加載了它。我是否以這種錯誤的方式去做?我已經嘗試了一下,看看是否有其他人做過這樣的事情,但我能找到的所有教程都是在RelativeLayout上繪製重疊圖像或將圖像加載到GridView中,但不是兩者兼而有之。我很抱歉,我是Android新手。如何在gridview中顯示2個重疊視圖?

回答

0

如果我沒有錯,當你點擊時你所需要的是在gridView中選擇一個視圖的狀態。我不認爲在現有的基礎上再繪製一張圖片是必要的。您可以像使用自定義適配器一樣使用viewHolder模式更改現有的視圖背景。看看下面的鏈接。你可能會想到如何去做。

Dynamically hiding Views in Custom Listview in Android

+0

如果您的意思是將圖像設置爲view.SetSelected(true);我確實嘗試過,但沒有圖像修改來表示它已被選中。我現在的解決方法只是調整images.setAlpha() –

+0

不......我的意思是當你點擊時爲該視圖設置不同的背景 – Braj

0

列表視圖不保留焦點(或選擇)的,而在觸摸模式的視覺指示。您只有在使用硬件鍵盤或控件導航UI時纔會看到此內容。

查看谷歌Touch模式Android博客文章瞭解更多詳情。

因此,如果您只使用觸摸模式,您將永遠不會在ListView上看到焦點或選擇。

你正在做什麼可以很好地工作,很少修改。

  • 放置ImageView的(孩子)的容器(母象的RelativeLayout等)內。
  • 爲父項設置一些填充以使其背景可見。
  • 點擊後,更改點擊項目的父項背景(在GridView的OnClickListener的onClick()方法中)。
  • 調用notifyDataSetChanged()的適配器(重繪當前可見的項目)

這裏是這樣的示例代碼:

grid.setOnItemClickListener(new OnItemClickListener() { 
      @Override 
      public void onItemClick (AdapterView<?> parent, 
        View v, int position, long Id) 
      { 
        highlighted = position; //highlighted is a global variable 
        //container is the root view of the list row layout 
        LinearLayout container = (LinearLayout)v.findViewById(R.id.container); 
        container.setBackgroundResource(R.drawable.highlighted_backg); 
        mGridAdapter.notifyDataSetChanged(); 

      } 
    }); 

代碼getView()方法:

public View getView (int position, View convertView, ViewGroup parent) 
{ 
    ViewHolder holder; 

    if(convertView == null) { 
     convertView = inflater.inflate(R.layout.row_item, null); 
     holder = new ViewHolder(); 
     holder.itemName1 = (TextView)convertView.findViewById(R.id.text1); 
     ... 
     holder.container = (LineaLayout)convertView.findViewById(R.id.container); 
     convertView.setTag(holder); 
    } else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 

    if(MainActivity.highlighted == position) { 
     holder.container.setBackgroundResource(R.drawable.highlighted_backg); 
    }else { 
     holder.foodItemCol1.setBackgroundResource(R.drawable.normal_back); 
    } 

    return convertView; 
} 
0
ImageView iv = (ImageView)v.findViewById(R.id.grid_item_image); 
iv.setBackgroundResource(imageIDs[4]); 
iv.setImageResource(imageIDs[2]); 
0

您可以爲選定的imageview設置濾鏡,fo例如imageView.setColorFilter(Color.parse("#77000000"));(將其添加到ImageView的onClickListeneronClick方法中),這會在所選的ImageView上添加一個半透明灰色圖層,以確定它已被選中。