From a13641291646bda384685dcf1f29882ec1976f80 Mon Sep 17 00:00:00 2001 From: NVManh Date: Mon, 16 Jul 2018 09:51:06 +0700 Subject: [PATCH] demo gallery2 --- app/build.gradle | 4 +- app/src/main/AndroidManifest.xml | 2 + .../nvmanh/demogallery/MainActivity.java | 80 +++++++++++++++++++ .../example/nvmanh/demogallery/Picture.java | 27 +++++++ .../demogallery/RecyclerAdapterImage.java | 57 +++++++++++++ .../res/drawable/ic_add_circle_black_24dp.xml | 5 ++ app/src/main/res/layout/activity_main.xml | 17 ++-- .../main/res/layout/item_image_recycler.xml | 28 +++++++ app/src/main/res/values/colors.xml | 2 + app/src/main/res/values/dimens.xml | 6 ++ 10 files changed, 220 insertions(+), 8 deletions(-) create mode 100644 app/src/main/java/com/example/nvmanh/demogallery/Picture.java create mode 100644 app/src/main/java/com/example/nvmanh/demogallery/RecyclerAdapterImage.java create mode 100644 app/src/main/res/drawable/ic_add_circle_black_24dp.xml create mode 100644 app/src/main/res/layout/item_image_recycler.xml create mode 100644 app/src/main/res/values/dimens.xml diff --git a/app/build.gradle b/app/build.gradle index a31953f..ca38a56 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -19,10 +19,12 @@ android { } dependencies { - implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation fileTree(include: ['*.jar'], dir: 'libs') implementation 'com.android.support:appcompat-v7:26.1.0' implementation 'com.android.support.constraint:constraint-layout:1.1.2' testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.2' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' + implementation 'com.android.support:design:26.1.0' + implementation 'com.squareup.picasso:picasso:2.3.2' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9eea0b3..57b895d 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,6 +2,8 @@ + + mPictures; + private RecyclerAdapterImage mAdapterImage; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); + initView(); + mPictures = new ArrayList<>(); + mRecyclerGallery.setLayoutManager(new GridLayoutManager(this, 2)); + mAdapterImage = new RecyclerAdapterImage(this, mPictures); + mRecyclerGallery.setAdapter(mAdapterImage); + checkPermission(); + } + + private void initView() { + mRecyclerGallery = findViewById(R.id.recycler_gallery); + } + + private void checkPermission(){ + if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) + != PackageManager.PERMISSION_GRANTED) { + requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, REQUEST_PERMISSION); + } + } else { + getImageFromGallery(); + } + } + + @Override + public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { + if(requestCode == REQUEST_PERMISSION && grantResults[0] == PackageManager.PERMISSION_GRANTED){ + getImageFromGallery(); + } else { + finish(); + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + } + } + + private void getImageFromGallery(){ + File file = new File(PATH_IMAGE); + File[] images = file.listFiles(new FileFilter() { + @Override + public boolean accept(File file) { + return file.getAbsolutePath().endsWith(PNG) + || file.getAbsolutePath().endsWith(JPG) + || file.getAbsolutePath().endsWith(JPEG); + } + }); + + for(File f : images){ + Picture p = new Picture(f.getAbsolutePath().substring(LENGTH_CUT), f.getAbsolutePath()); + mPictures.add(p); + mAdapterImage.notifyDataSetChanged(); + } } } diff --git a/app/src/main/java/com/example/nvmanh/demogallery/Picture.java b/app/src/main/java/com/example/nvmanh/demogallery/Picture.java new file mode 100644 index 0000000..1942f72 --- /dev/null +++ b/app/src/main/java/com/example/nvmanh/demogallery/Picture.java @@ -0,0 +1,27 @@ +package com.example.nvmanh.demogallery; + +public class Picture { + private String name; + private String pathImage; + + public Picture(String name, String pathImage) { + this.name = name; + this.pathImage = pathImage; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPathImage() { + return pathImage; + } + + public void setPathImage(String pathImage) { + this.pathImage = pathImage; + } +} diff --git a/app/src/main/java/com/example/nvmanh/demogallery/RecyclerAdapterImage.java b/app/src/main/java/com/example/nvmanh/demogallery/RecyclerAdapterImage.java new file mode 100644 index 0000000..67ee313 --- /dev/null +++ b/app/src/main/java/com/example/nvmanh/demogallery/RecyclerAdapterImage.java @@ -0,0 +1,57 @@ +package com.example.nvmanh.demogallery; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import com.squareup.picasso.Picasso; + +import java.io.File; +import java.util.List; + +public class RecyclerAdapterImage extends RecyclerView.Adapter { + + private List mPictures; + private Context mContext; + + public RecyclerAdapterImage(Context mContext, List mPictures) { + this.mContext = mContext; + this.mPictures = mPictures; + } + + @Override + public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + LayoutInflater inflater = + (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + View view = inflater.inflate(R.layout.item_image_recycler, parent, false); + + return new ViewHolder(view); + } + + @Override + public void onBindViewHolder(ViewHolder holder, int position) { + Picture p = mPictures.get(position); + holder.text.setText(p.getName()); + Picasso.with(mContext).load(new File(p.getPathImage())) + .into(holder.image); + } + + @Override + public int getItemCount() { + return mPictures.size(); + } + + public class ViewHolder extends RecyclerView.ViewHolder { + ImageView image; + TextView text; + public ViewHolder(View itemView) { + super(itemView); + image = itemView.findViewById(R.id.image_demo); + text = itemView.findViewById(R.id.text_name); + } + } +} diff --git a/app/src/main/res/drawable/ic_add_circle_black_24dp.xml b/app/src/main/res/drawable/ic_add_circle_black_24dp.xml new file mode 100644 index 0000000..8866863 --- /dev/null +++ b/app/src/main/res/drawable/ic_add_circle_black_24dp.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 84f1951..ffb9b42 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,18 +1,21 @@ - - + /> - \ No newline at end of file + diff --git a/app/src/main/res/layout/item_image_recycler.xml b/app/src/main/res/layout/item_image_recycler.xml new file mode 100644 index 0000000..9792c8b --- /dev/null +++ b/app/src/main/res/layout/item_image_recycler.xml @@ -0,0 +1,28 @@ + + + + + + + + diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 3ab3e9c..484361f 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -3,4 +3,6 @@ #3F51B5 #303F9F #FF4081 + #ffffff + #000 diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml new file mode 100644 index 0000000..1a55246 --- /dev/null +++ b/app/src/main/res/values/dimens.xml @@ -0,0 +1,6 @@ + + + 2dp + 200dp + 15sp +