2016-06-01 133 views
3

我在使用Glide的網格視圖中顯示圖像列表。當用戶點擊任何圖像時,我需要用勾號標出。Android中的setForeground替代Highlite選擇網格佈局

我用setForeground成功地做到了這一點,但它僅適用於Android 6.0及更高版本。

我試過選擇器,但沒有工作,因爲顏色出現在不可見的圖像後面。

現在我該如何highlite選定的圖像?

GridView gallery = (GridView) findViewById(R.id.galleryGridView); 

     gallery.setAdapter(new ImageAdapter(this)); 

     gallery.setOnItemClickListener(new OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> arg0, View arg1, 
            int position, long arg3) { 
       if (null != images && !images.isEmpty()) 

       arg1.setForeground(getDrawable(R.drawable.tick)); //Min API 23 
      } 
     }); 
    } 

圖片適配器

private class ImageAdapter extends BaseAdapter { 


     public ImageAdapter(Activity localContext) { 
      context = localContext; 
      images = getAllShownImagesPath(context); 
     } 

     public int getCount() { 
      return images.size(); 
     } 

     public Object getItem(int position) { 
      return position; 
     } 

     public long getItemId(int position) { 
      return position; 
     } 

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

      if (convertView == null) { 
       picturesView = new ImageView(context); 
       picturesView.setScaleType(ImageView.ScaleType.FIT_CENTER); 
       picturesView 
         .setLayoutParams(new GridView.LayoutParams(270, 270)); 

      } else { 
       picturesView = (ImageView) convertView; 
      } 

      Glide.with(context).load(images.get(position)) 
        .placeholder(R.mipmap.ic_launcher).centerCrop() 
        .into(picturesView); 

      return picturesView; 
     } 

     private ArrayList<String> getAllShownImagesPath(Activity activity) { 
      Uri uri; 
      Cursor cursor; 
      int column_index_data, column_index_folder_name; 
      ArrayList<String> listOfAllImages = new ArrayList<String>(); 
      String absolutePathOfImage = null; 
     String orderBy = MediaStore.Images.ImageColumns.DATE_TAKEN + " DESC"; 


      // Get relevant columns for use later. 
      String[] projection = { 
        MediaStore.Files.FileColumns._ID, 
        MediaStore.Files.FileColumns.DATA, 
        MediaStore.Files.FileColumns.DATE_ADDED, 
        MediaStore.Files.FileColumns.MEDIA_TYPE, 
        MediaStore.Files.FileColumns.MIME_TYPE, 
        MediaStore.Files.FileColumns.TITLE 
      }; 

// Return only video and image metadata. 
      String selection = MediaStore.Files.FileColumns.MEDIA_TYPE + "=" 
        + MediaStore.Files.FileColumns.MEDIA_TYPE_IMAGE 
        + " OR " 
        + MediaStore.Files.FileColumns.MEDIA_TYPE + "=" 
        + MediaStore.Files.FileColumns.MEDIA_TYPE_VIDEO; 

      Uri queryUri = MediaStore.Files.getContentUri("external"); 

      cursor = activity.getContentResolver().query(queryUri, 
        projection, 
        selection, 
        null, // Selection args (none). 
        MediaStore.Files.FileColumns.DATE_ADDED + " DESC"); 

      column_index_data = cursor.getColumnIndexOrThrow(MediaColumns.DATA); 
      // column_index_folder_name = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.BUCKET_DISPLAY_NAME); 
      while (cursor.moveToNext()) { 
       absolutePathOfImage = cursor.getString(column_index_data); 

       listOfAllImages.add(absolutePathOfImage); 
      } 
      return listOfAllImages; 
     } 
    } 

佈局文件

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    > 

    <GridView 
     android:id="@+id/galleryGridView" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 

     android:gravity="center" 
     android:horizontalSpacing="2dp" 
     android:numColumns="3" 
     android:padding="2dp" 

     android:verticalSpacing="2dp" 

     android:background="#303030"> 
    </GridView> 

</RelativeLayout> 
+0

使用framelayout作爲父佈局.. –

+0

沒有工作.. – Ramesh

回答

0

使用ForegroundImageViewlibrary insted的ImageView的的。因爲setForeground方法僅適用於API> = 23。