![钢镚儿冲刺一周期第九天
一、说在前面
二、思路
三、代码
四、效果
五、感想]()
![钢镚儿冲刺一周期第九天
一、说在前面
二、思路
三、代码
四、效果
五、感想]()
package com.example.imgpicker;
import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.example.imgpicker.Adapter.ResultImageAdapter;
import com.example.imgpicker.domain.ImageItem;
import com.example.imgpicker.utils.PickerConfig;
import java.lang.ref.WeakReference;
import java.util.List;
@RequiresApi(api = Build.VERSION_CODES.M)
public class MainActivity extends AppCompatActivity implements PickerConfig.OnImageSelectFinishListener {
private static final int MAX_SELECTED_COUNT = 1;
private static final String TAG = "MainActivity";
private static final int PERMISSION_REQUEST_CODE = 1;
RecyclerView result_list;
ResultImageAdapter resultImageAdapter;
ImageView last_iv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
checkPermission();
initPickerConfig();
}
private void initView() {
result_list = findViewById(R.id.result_list);
last_iv =findViewById(R.id.last_iv);
resultImageAdapter = new ResultImageAdapter();
result_list.setAdapter(resultImageAdapter);
}
private void initPickerConfig() {
PickerConfig picker=PickerConfig.getInstance();
//设置最大值
picker.setMaxSelectedCount(MAX_SELECTED_COUNT);
picker.setOnImageSelectFinishListener(this);
}
private void checkPermission() {
int readExStoragePermissionRest = checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE);
if (readExStoragePermissionRest!= PackageManager.PERMISSION_GRANTED){
//没有权限
requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},PERMISSION_REQUEST_CODE);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode==PERMISSION_REQUEST_CODE){
if (grantResults.length==0&&grantResults[0]== PackageManager.PERMISSION_GRANTED) {
//有权限
}else {
//没有权限
//根据交互去处理
}
}
}
public void pickImgs(View view){
// 打开另外一个界面
startActivity(new Intent(this,PickerAvtivity.class));
}
@Override
public void onSelectedFinished(List<ImageItem> result) {
//返回来的数据显示出来
for (ImageItem imageItem : result) {
Log.d(TAG, " item----> "+imageItem);
}
int horizentalCount;
if(result.size()<3){
horizentalCount=result.size();
}else {
horizentalCount=3;
}
ImageItem i=result.get(0);
func(i.getPath(),i.getW(),i.getH());
}
//褪色处理
public void func(String path,int w,int h)
{
Bitmap bitmap = convertToBitmap(path,w,h);
// int width = bitmap.getWidth();
// int height = bitmap.getHeight();
Bitmap base = bitmap.copy(Bitmap.Config.ARGB_8888, true);
// Bitmap B=toGrayscale(base);
Canvas canvas = new Canvas(base);//以base为模板创建canvas对象
canvas.drawBitmap(bitmap, new Matrix(),new Paint());
for(int i = 0; i < base.getWidth(); i++)//遍历像素点
{
for(int j = 0; j < base.getHeight()*0.5; j++)
{
int color = bitmap.getPixel(i, j);
int r = Color.red(color);
int g = Color.green(color);
int b = Color.blue(color);
int a = Color.alpha(color);
int avg = (r+g+b)/3;//RGB均值
r= (int) (r/3);
g=(int)(g/3);
b=(int)(b/3);
base.setPixel(i, j,Color.argb(a, r, g, b));
// if(avg >= 100)//100可以理解为经验值
// {
// base.setPixel(i, j,Color.argb(a, 255, 255, 255));//设为白色
// }
// else
// {
// base.setPixel(i, j,Color.argb(a, 0, 0, 0));//设为黑色
// }
}
}
bitmap.recycle();
last_iv.setImageBitmap(base);
}
public static Bitmap convertToBitmap(String path, int w, int h) {
BitmapFactory.Options opts = new BitmapFactory.Options();
// 设置为ture只获取图片大小
opts.inJustDecodeBounds = true;
opts.inPreferredConfig = Bitmap.Config.ARGB_8888;
// 返回为空
BitmapFactory.decodeFile(path, opts);
int width = opts.outWidth;
int height = opts.outHeight;
float scaleWidth = 0.f, scaleHeight = 0.f;
if (width > w || height > h) {
// 缩放
scaleWidth = ((float) width) / w;
scaleHeight = ((float) height) / h;
}
opts.inJustDecodeBounds = false;
float scale = Math.max(scaleWidth, scaleHeight);
opts.inSampleSize = (int)scale;
WeakReference<Bitmap> weak = new WeakReference<Bitmap>(BitmapFactory.decodeFile(path, opts));
return Bitmap.createScaledBitmap(weak.get(), w, h, true);
}
}
MainActivity
![钢镚儿冲刺一周期第九天
一、说在前面
二、思路
三、代码
四、效果
五、感想]()
![钢镚儿冲刺一周期第九天
一、说在前面
二、思路
三、代码
四、效果
五、感想]()
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:andro>
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:layout_width="wrap_content"
android:id="@+id/back_press_iv"
android:src="@mipmap/pick_black_back"
android:padding="10dp"
android:layout_height="wrap_content"/>
<TextView
android:layout_width="wrap_content"
android:layout_centerVertical="true"
android:id="@+id/finish_tv"
android:layout_alignParentRight="true"
android:layout_marginRight="10dp"
android:text="(0/1)完成"
android:textColor="#000000"
android:layout_height="wrap_content"/>
</RelativeLayout>
<androidx.recyclerview.widget.RecyclerView
android:layout_width="match_parent"
android:id="@+id/image_list_view"
android:layout_height="match_parent"/>
</LinearLayout>
activity_picker
![钢镚儿冲刺一周期第九天
一、说在前面
二、思路
三、代码
四、效果
五、感想]()
![钢镚儿冲刺一周期第九天
一、说在前面
二、思路
三、代码
四、效果
五、感想]()
package com.example.imgpicker.Adapter;
import android.graphics.Point;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
import com.example.imgpicker.R;
import com.example.imgpicker.domain.ImageItem;
import com.example.imgpicker.utils.SizeUtils;
import java.util.ArrayList;
import java.util.List;
public class ResultImageAdapter extends RecyclerView.Adapter<ResultImageAdapter.InnerHolder> {
private List<ImageItem> mImageItems=new ArrayList<>();
private int horizentalCount=1;
@NonNull
@Override
public ResultImageAdapter.InnerHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_image, parent, false);
itemView.findViewById(R.id.image_check_box).setVisibility(View.GONE);
return new InnerHolder(itemView);
}
@Override
public void onBindViewHolder(@NonNull ResultImageAdapter.InnerHolder holder, int position) {
View itemView = holder.itemView;
Point point = SizeUtils.getScreenSize(itemView.getContext());
RecyclerView.LayoutParams layoutParams=new RecyclerView.LayoutParams(point.x/horizentalCount,point.x/horizentalCount);
itemView.setLayoutParams(layoutParams);
ImageView imageView =itemView.findViewById(R.id.image_iv);
ImageItem imageItem = mImageItems.get(position);
Glide.with(imageView.getContext()).load(imageItem.getPath()).into(imageView);
}
@Override
public int getItemCount() {
return mImageItems.size();
}
public void setData(List<ImageItem> result, int horizentalCount) {
this.horizentalCount=horizentalCount;
mImageItems.clear();
mImageItems.addAll(result);
notifyDataSetChanged();
}
public class InnerHolder extends RecyclerView.ViewHolder {
public InnerHolder(@NonNull View itemView) {
super(itemView);
}
}
}
Result_Manager
![钢镚儿冲刺一周期第九天
一、说在前面
二、思路
三、代码
四、效果
五、感想]()
![钢镚儿冲刺一周期第九天
一、说在前面
二、思路
三、代码
四、效果
五、感想]()
package com.example.imgpicker;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.os.Bundle;
import android.provider.MediaStore;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.loader.app.LoaderManager;
import androidx.loader.content.CursorLoader;
import androidx.loader.content.Loader;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.example.imgpicker.Adapter.ImageListAdapter;
import com.example.imgpicker.domain.ImageItem;
import com.example.imgpicker.utils.PickerConfig;
import java.util.ArrayList;
import java.util.List;
//D/PickerAvtivity: onCreate: ====================================
//D/PickerAvtivity: _id ==== 43
//D/PickerAvtivity: _data ==== /storage/emulated/0/DCIM/Camera/IMG_20200420_064425.jpg
//D/PickerAvtivity: _size ==== 197214
//D/PickerAvtivity: _display_name ==== IMG_20200420_064425.jpg
//D/PickerAvtivity: mime_type ==== image/jpeg
//D/PickerAvtivity: title ==== IMG_20200420_064425
//D/PickerAvtivity: date_added ==== 1587365066
//D/PickerAvtivity: date_modified ==== 1587365066
//D/PickerAvtivity: description ==== null
//D/PickerAvtivity: picasa_id ==== null
//D/PickerAvtivity: isprivate ==== null
//D/PickerAvtivity: latitude ==== 37.422
//D/PickerAvtivity: longitude ==== -122.084
//D/PickerAvtivity: datetaken ==== 1587365065974
//D/PickerAvtivity: orientation ==== 0
//D/PickerAvtivity: mini_thumb_magic ==== null
//D/PickerAvtivity: bucket_id ==== -1739773001
//D/PickerAvtivity: bucket_display_name ==== Camera
//D/PickerAvtivity: width ==== 960
//D/PickerAvtivity: height ==== 1280
//D/PickerAvtivity: onCreate: ====================================
public class PickerAvtivity extends AppCompatActivity implements ImageListAdapter.OnItemSelectedChangeListener {
private static final String TAG = "PickerAvtivity";
public static final int LOADER_ID=1;
private List<ImageItem> mImageItem=new ArrayList<>();
ImageListAdapter mImageListAdapter;
TextView finishView;
PickerConfig picker;
ImageView backView;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_picker);
// ContentResolver contentResolver=getContentResolver();
// Uri imageUri= MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
// Cursor query =contentResolver.query(imageUri,null,null,null,null);
// String[] colunmNames=query.getColumnNames();
// while (query.moveToNext()){
// Log.d(TAG, "onCreate: ====================================");
// for (String colunmName : colunmNames) {
// Log.d(TAG, colunmName+" ==== "+query.getString(query.getColumnIndex(colunmName)));
// }
// Log.d(TAG, "onCreate: ====================================");
// }
// query.close();
initLoaderManager();
initView();
initEvent();
initConfig();
}
private void initConfig() {
picker = PickerConfig.getInstance();
int maxSelectedCount= picker.getMaxSelectedCount();
mImageListAdapter.setmMaxSelectedCount(maxSelectedCount);
}
private void initEvent() {
mImageListAdapter.setOnItemSelectedChangeListener(this);
finishView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//获取所选择的数据
List<ImageItem> results = mImageListAdapter.getmSelectedItems();
//通知其他地方
PickerConfig.OnImageSelectFinishListener onImageSelectFinishListener = picker.getmImageSelectedFinishListener();
if (onImageSelectFinishListener!=null){
onImageSelectFinishListener.onSelectedFinished(results);
}
//结束
finish();
}
});
backView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
}
private void initView() {
finishView = findViewById(R.id.finish_tv);
RecyclerView listView=findViewById(R.id.image_list_view);
backView = findViewById(R.id.back_press_iv);
listView.setLayoutManager(new GridLayoutManager(this,3));
//设置适配器
mImageListAdapter = new ImageListAdapter();
listView.setAdapter(mImageListAdapter);
}
private void initLoaderManager() {
mImageItem.clear();
LoaderManager loaderManager=LoaderManager.getInstance(this);
loaderManager.initLoader(LOADER_ID, null, new LoaderManager.LoaderCallbacks<Cursor>() {
@NonNull
@Override
public Loader<Cursor> onCreateLoader(int id, @Nullable Bundle args) {
if(id==LOADER_ID){
return new CursorLoader(PickerAvtivity.this,MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
new String[]{"_data","_display_name","date_added","_id","width","height"},
null,null,"date_added DESC");
}
return null;
}
@Override
public void onLoadFinished(@NonNull Loader<Cursor> loader, Cursor cursor) {
if (cursor!=null){
while (cursor.moveToNext()){
String path=cursor.getString(0);
String title=cursor.getString(1);
long date=cursor.getLong(2);
int id=cursor.getInt(3);
int w=cursor.getInt(4);
int h=cursor.getInt(5);
ImageItem imageItem=new ImageItem(path,title,date,id,w,h);
// func(imageItem);
mImageItem.add(imageItem);
}
cursor.close();
for (ImageItem imageItem : mImageItem) {
Log.d(TAG, "imageItem ==========> "+imageItem.toString());
}
mImageListAdapter.setData(mImageItem);
}
}
@Override
public void onLoaderReset(@NonNull Loader<Cursor> loader) {
}
});
}
@Override
public void OnItemSelectedChange(List<ImageItem> mSelectedItems) {
//所选择的数据发生变化
finishView.setText("("+mSelectedItems.size()+"/"+mImageListAdapter.getmMaxSelectedCount()+")完成");
}
public void func(ImageView view)
{
Bitmap bitmap = BitmapFactory.decodeResource(getResources(),43);
int width = bitmap.getWidth();
int height = bitmap.getHeight();
Bitmap base = Bitmap.createBitmap(width, height,bitmap.getConfig());
// Bitmap B=toGrayscale(base);
Canvas canvas = new Canvas(base);//以base为模板创建canvas对象
canvas.drawBitmap(bitmap, new Matrix(),new Paint());
for(int i = 0; i < width; i++)//遍历像素点
{
for(int j = 0; j < height*0.5; j++)
{
int color = bitmap.getPixel(i, j);
int r = Color.red(color);
int g = Color.green(color);
int b = Color.blue(color);
int a = Color.alpha(color);
int avg = (r+g+b)/3;//RGB均值
if(avg >= 150)//100可以理解为经验值
{
base.setPixel(i, j,Color.argb(a, 255, 255, 255));//设为白色
}
else
{
base.setPixel(i, j,Color.argb(a, 0, 0, 0));//设为黑色
}
}
}
bitmap.recycle();
view.setImageBitmap(base);
}
}
ImagePicker