2016-09-29 11 views
0

私は携帯電話からすべての画像を表示するGridViewを持っています。私は複数の画像を選択し、選択した画像をarraylistに保存することができます。選択した画像のサイズを1MBに制限します。そのためには、選択中にすべての画像のサイズを確認したい。クリックされた画像のサイズが1MB未満の場合は選択され、それ以外の場合は選択されません。それを行う方法はありますか?チェックボックスの画像のサイズを確認してください。

活動

public class CustomGalleryActivity extends AppCompatActivity implements View.OnClickListener { 
 
    private static Button selectImages; 
 
    private static GridView galleryImagesGridView; 
 
    private static ArrayList<String> galleryImageUrls; 
 
    private static GridViewAdapter imagesAdapter; 
 
    int file_size; 
 

 
    @Override 
 
    protected void onCreate(Bundle savedInstanceState) { 
 
     super.onCreate(savedInstanceState); 
 
     setContentView(R.layout.customgallery_activity); 
 
     initViews(); 
 
     setListeners(); 
 
     fetchGalleryImages(); 
 
     setUpGridView(); 
 
    } 
 

 
    //Init all views 
 
    private void initViews() { 
 
     selectImages = (Button) findViewById(R.id.selectImagesBtn); 
 
     galleryImagesGridView = (GridView) findViewById(R.id.galleryImagesGridView); 
 

 
    } 
 

 
    //fetch all images from gallery 
 
    private void fetchGalleryImages() { 
 
     final String[] columns = {MediaStore.Images.Media.DATA, MediaStore.Images.Media._ID};//get all columns of type images 
 
     final String orderBy = MediaStore.Images.Media.DATE_TAKEN;//order data by date 
 
     Cursor imagecursor = managedQuery(
 
       MediaStore.Images.Media.EXTERNAL_CONTENT_URI, columns, null, 
 
       null, orderBy + " DESC");//get all data in Cursor by sorting in DESC order 
 

 
     galleryImageUrls = new ArrayList<String>();//Init array 
 

 

 
     //Loop to cursor count 
 
     for (int i = 0; i < imagecursor.getCount(); i++) { 
 
      imagecursor.moveToPosition(i); 
 
      int dataColumnIndex = imagecursor.getColumnIndex(MediaStore.Images.Media.DATA);//get column index 
 

 
      galleryImageUrls.add(imagecursor.getString(dataColumnIndex));//get Image from column index 
 
      System.out.println("Array path" + galleryImageUrls.get(i)); 
 

 

 
     } 
 

 

 
    } 
 

 
    //Set Up GridView method 
 
    private void setUpGridView() { 
 
     imagesAdapter = new GridViewAdapter(CustomGalleryActivity.this, galleryImageUrls); 
 
     galleryImagesGridView.setAdapter(imagesAdapter); 
 
    } 
 

 
    //Set Listeners method 
 
    private void setListeners() { 
 
     selectImages.setOnClickListener(this); 
 
    } 
 

 

 
    //Show hide select button if images are selected or deselected 
 
    public void showSelectButton() { 
 
     ArrayList<String> selectedItems = imagesAdapter.getCheckedItems(); 
 
     if (selectedItems.size() > 0) { 
 
      selectImages.setText(selectedItems.size() + " - Images Selected"); 
 
      selectImages.setVisibility(View.VISIBLE); 
 
     } else 
 
      selectImages.setVisibility(View.GONE); 
 

 
    } 
 

 
    @Override 
 
    public void onClick(View view) { 
 
     switch (view.getId()) { 
 
      case R.id.selectImagesBtn: 
 

 
       //When button is clicked then fill array with selected images 
 
       ArrayList<String> selectedItems = imagesAdapter.getCheckedItems(); 
 

 
       //Send back result to MainActivity with selected images 
 
       Intent intent = new Intent(); 
 
       intent.putExtra(UploadActivity.CustomGalleryIntentKey, selectedItems.toString());//Convert Array into string to pass data 
 
       setResult(RESULT_OK, intent);//Set result OK 
 
       finish();//finish activity 
 
       break; 
 

 
     } 
 

 
    } 
 
}
public class GridViewAdapter extends BaseAdapter { 
 
    private Context context; 
 
    private ArrayList<String> imageUrls; 
 
    private SparseBooleanArray mSparseBooleanArray; 
 

 
    public GridViewAdapter(Context context, ArrayList<String> imageUrls) { 
 
     this.context = context; 
 
     this.imageUrls = imageUrls; 
 
     mSparseBooleanArray = new SparseBooleanArray(); 
 
    } 
 

 
    //Method to return selected Images 
 
    public ArrayList<String> getCheckedItems() { 
 
     ArrayList<String> mTempArry = new ArrayList<String>(); 
 

 
     for (int i = 0; i < imageUrls.size(); i++) { 
 
      if (mSparseBooleanArray.get(i)) { 
 
       mTempArry.add(imageUrls.get(i)); 
 
      } 
 
     } 
 

 
     return mTempArry; 
 
    } 
 

 
    @Override 
 
    public int getCount() { 
 
     return imageUrls.size(); 
 
     //return 10; 
 
    } 
 

 
    @Override 
 
    public Object getItem(int i) { 
 
     return imageUrls.get(i); 
 
    } 
 

 
    @Override 
 
    public long getItemId(int i) { 
 
     return i; 
 
    } 
 

 
    @Override 
 
    public View getView(int position, View view, ViewGroup viewGroup) { 
 
     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
 
     if (view == null) 
 
      view = inflater.inflate(R.layout.customgridview_item, viewGroup, false);//Inflate layout 
 

 
     CheckBox mCheckBox = (CheckBox) view.findViewById(R.id.selectCheckBox); 
 
     final ImageView imageView = (ImageView) view.findViewById(R.id.galleryImageView); 
 

 

 

 

 
     Picasso.with(context).load("file://" + imageUrls.get(position)).placeholder(R.drawable.placeholder).into(imageView); 
 

 
     mCheckBox.setTag(position);//Set Tag for CheckBox 
 
     mCheckBox.setChecked(mSparseBooleanArray.get(position)); 
 
     mCheckBox.setOnCheckedChangeListener(mCheckedChangeListener); 
 
     return view; 
 
    } 
 

 
    CompoundButton.OnCheckedChangeListener mCheckedChangeListener = new CompoundButton.OnCheckedChangeListener() { 
 

 
     @Override 
 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
 

 
      System.out.println("sammy_position "+buttonView.getTag()); 
 

 
      
 
\t \t \t File f = new File(imageUrls.get((Integer) buttonView.getTag())); 
 
      int file_size = Integer.parseInt(String.valueOf(f.length()/(1024*1024))); 
 

 
      // Filtering the image size 
 
      if(file_size<1){ 
 
       mSparseBooleanArray.put((Integer) buttonView.getTag(), isChecked);//Insert selected checkbox value inside boolean array 
 
       ((CustomGalleryActivity) context).showSelectButton();//call custom gallery activity method 
 
      }else{ 
 
       buttonView.setChecked(false); 
 
       Toast.makeText(context, "Select image of size 1MB or less", Toast.LENGTH_SHORT).show(); 
 
      } 
 

 

 
     } 
 
    }; 
 
}

+0

イメージのEXIF情報を取得できます。すべての詳細を取得してローカルに保存し、アイテムのクリックを確認してください –

+0

私はgridviewのすべての画像のサイズを取得しています。しかし、チェックボックスで選択した画像のサイズを確認するにはどうすればいいですか? –

+0

問題は何ですか?違いは何ですか?あなたはまずそれを説明することができます。オン・チェック・チェンジ・ハンドラでイメージ・ファイルのサイズをチェックするだけで、サイズが大きすぎる場合はすぐにチェックを外す必要があります。より良い選択肢は、そのような画像を最初に表示することではありません。または、それらを有効にしたり、別の方法でマークしたりしないでください。そうでなければ、ユーザはこの試行錯誤を嫌うでしょう。 – greenapps

答えて

1
public void calculateImageSize(int imageId){ 
     Bitmap bitmapOrg = BitmapFactory.decodeResource(getResources(), 
       imageId); 


     Bitmap bitmap = bitmapOrg; 
     ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
     bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream); 
     byte[] imageInByte = stream.toByteArray(); 
     long lengthbmp = imageInByte.length; 

     double sizeInKB=(lengthbmp/1024); 
     double sizeInMB=(lengthbmp/(1024*1024)); 

     Log.d("TAG","Size "+sizeInKB+"KB"); 
     Log.d("TAG","Size "+sizeInMB+"MB"); 

    } 

キロバイトでサイズを見つけるために、この

import android.content.Context; 
import android.util.SparseBooleanArray; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.CheckBox; 
import android.widget.CompoundButton; 
import android.widget.ImageView; 

import java.util.ArrayList; 

public class GridViewAdapter extends BaseAdapter { 
    private Context context; 
    private ArrayList<String> imageUrls; 
    private SparseBooleanArray mSparseBooleanArray; 
    private boolean isCustomGalleryActivity; 

    public GridViewAdapter(Context context, ArrayList<String> imageUrls, boolean isCustomGalleryActivity) { 
     this.context = context; 
     this.imageUrls = imageUrls; 
     this.isCustomGalleryActivity = isCustomGalleryActivity; 
     mSparseBooleanArray = new SparseBooleanArray(); 
    } 

    //Method to return selected Images 
    public ArrayList<String> getCheckedItems() { 
     ArrayList<String> mTempArry = new ArrayList<String>(); 

     for (int i = 0; i < imageUrls.size(); i++) { 
      if (mSparseBooleanArray.get(i)) { 
       mTempArry.add(imageUrls.get(i)); 
      } 
     } 

     return mTempArry; 
    } 

    @Override 
    public int getCount() { 
     return imageUrls.size(); 
     //return 10; 
    } 

    @Override 
    public Object getItem(int i) { 
     return imageUrls.get(i); 
    } 

    @Override 
    public long getItemId(int i) { 
     return i; 
    } 

    @Override 
    public View getView(int position, View view, ViewGroup viewGroup) { 
     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     if (view == null) 
      view = inflater.inflate(R.layout.customgridview_item, viewGroup, false);//Inflate layout 

     CheckBox mCheckBox = (CheckBox) view.findViewById(R.id.selectCheckBox); 
     final ImageView imageView = (ImageView) view.findViewById(R.id.galleryImageView); 

     //If Context is MainActivity then hide checkbox 
     if (!isCustomGalleryActivity) 
      mCheckBox.setVisibility(View.GONE); 

     Picasso.with(context).load("file://" + imageUrls.get(position)).placeholder(R.drawable.placeholder).into(imageView); 

     mCheckBox.setTag("file://" + imageUrls.get(position)); 
     mCheckBox.setId(position);//Set Tag for CheckBox 
     mCheckBox.setChecked(mSparseBooleanArray.get(position)); 
     mCheckBox.setOnCheckedChangeListener(mCheckedChangeListener); 
     return view; 
    } 

    CompoundButton.OnCheckedChangeListener mCheckedChangeListener = new CompoundButton.OnCheckedChangeListener() { 

     @Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
      mSparseBooleanArray.put((Integer) buttonView.getId(), isChecked);//Insert selected checkbox value inside boolean array 

      String imagePath = (String) buttonView.getTag(); 
      ((CustomGalleryActivity) context).showSelectButton();//call custom gallery activity method 
     } 
    }; 
} 

使用してこの機能をアダプタを交換し& MB

+0

ここには 'imageId'とは何ですか? @Mohit –

+0

つまりR.drawable.ic_launcher –

+0

画像が端末にあります。 checkbox.setOnCheckedChangeListenerの内部のパラメータは何ですか? –

関連する問題