compile 'com.github.chrisbanes.photoview:library:1.2.4'
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<uk.co.senab.photoview.PhotoView
android:id="@+id/iv_imageshow"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
compile 'de.hdodenhof:circleimageview:2.1.0'
<activity android:name=".activity.ImageShowActivity"/>
//自定義的接口 用於傳遞圖片地址給跳轉的Activity
public interface OnItemClickListener {
//data 用於獲得圖片的網址
void onItemClick(String data);
}
2.2 聲明一個接口變量
//聲明接口變量
private OnItemClickListener mOnItemClickListener = null;
2.3 定義一個方法暴露接口給外部
//暴露接口給外部
public void setOnItemClickListener(OnItemClickListener OnItemClickListener) {
this.mOnItemClickListener = OnItemClickListener;
}
@Override
public void onBindViewHolder(final MyViewHolder holder, final int position) {
//Glide設置圖片(未加載則用粉色替代)
final String imageUrl = mList.get(position).getPicUrl();
Glide.with(mContext)
.load(imageUrl)
.asBitmap()
.centerCrop()
.placeholder(R.color.colorAccent)
.into(holder.mImageView);
//將數據保存在mImageView的TAG中,以便需要時取出
holder.mImageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//如果接口對象不爲空
if (mOnItemClickListener != null) {
//將點擊事件轉移給自定義的接口
mOnItemClickListener.onItemClick(imageUrl);
Log.e("TAG","-----------------adapter---" + imageUrl);
}
}
});
}
@Override
public void onFinish(GirlsBean data) {
//得到適配器
mAdapter = new MyAdapter(this,data.getShowapi_res_body().getNewslist());
//設置適配器
mRecyclerView.setAdapter(mAdapter);
//RecyclerView設置Item的點擊事件
mAdapter.setOnItemClickListener(new MyAdapter.OnItemClickListener() {
@Override
public void onItemClick(String data) {
//跳轉顯示詳細圖片的Activity
Intent intent = new Intent(MainActivity.this, ImageShowActivity.class);
intent.putExtra("data",data);
startActivity(intent);
}
});
}
PhotoView mPhotoView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_imageshow);
mPhotoView = (PhotoView) findViewById(R.id.iv_imageshow);
//得到intent傳來的值
String imageUrl = getIntent().getStringExtra("data");
//Glide設置圖片(未加載則用粉色替代)
Glide.with(this)
.load(imageUrl)
.asBitmap()
.centerCrop()
.placeholder(R.color.colorAccent)
.into(mPhotoView);
}
public class PicDownload {
public static void saveImage(View view, Context context) {
//得到sd卡根目錄
File root = Environment.getExternalStorageDirectory();
//將存儲路徑設置爲工程的名字
File dicectory = new File(root, "GirlImage");
//創建文件夾
if (!dicectory.exists()) {
dicectory.mkdirs();
}
// 獲取View的cache先要通過setDrawingCacheEnable方法把cache開啓,
// 然後再調用getDrawingCache方法就可 以獲得view的cache圖片
Bitmap bitmap = view.getDrawingCache();
//文件名以保存時的時間命名
File file = new File(dicectory, new Date().getTime() + ".jpg");
FileOutputStream fos = null;
try {
fos = new FileOutputStream(file);
//將bitmap以JPG的格式保存在設置的文件夾中
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
fos.flush();
Uri uri = Uri.fromFile(file);
//保存圖片後發送廣播通知圖庫更新圖片
context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri));
Toast.makeText(context, "保存成功", Toast.LENGTH_LONG).show();
} catch (FileNotFoundException e) {
e.printStackTrace();
Toast.makeText(context, "保存失敗", Toast.LENGTH_LONG).show();
} catch (IOException e) {
e.printStackTrace();
} finally {
//關閉流
if (fos != null) {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
//設置爲true後,可以通過view.getDrawingCache()獲得view的cache(緩存)
mPhotoView.setDrawingCacheEnabled(true);
//View的長按事件
mPhotoView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
//new一個對話框
new AlertDialog.Builder(ImageShowActivity.this)
.setMessage("保存圖片")
//消極的 否定的 即對話框的取消選項
.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface anInterface, int i) {
//讓Dialog對話框 從屏幕上消失
anInterface.dismiss();
}
})
//積極的 確定的 即對話框的確定選項
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface anInterface, int i) {
anInterface.dismiss();
//保存圖片
PicDownload.saveImage(mPhotoView, ImageShowActivity.this);
}
}).show();
return true;
}
});
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
//自定義的權限請求碼
private final static int REQUESTCODE = 101;
public void saveImage(){
//如果版本高於23 即Android6.0
if (Build.VERSION.SDK_INT >= 23) {
//檢查權限
int checkWriteContactsPermission = checkSelfPermission(
Manifest.permission.WRITE_EXTERNAL_STORAGE);
//如果沒有權限
if (checkWriteContactsPermission != PackageManager.PERMISSION_GRANTED) {
//請求權限 REQUESTCODE 自定義的權限請求碼
requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}
,REQUESTCODE);
return;
} else {
//如果有權限了
//執行保存圖片的方法
PicDownload.saveImage(mPhotoView, ImageShowActivity.this);
}
} else {
//如果版本低於Android6.0則直接使用
//執行保存圖片的方法
PicDownload.saveImage(mPhotoView, ImageShowActivity.this);
}
}
然後重寫方法 @Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
//回調
if (requestCode == REQUESTCODE) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
//執行保存圖片的方法
PicDownload.saveImage(mPhotoView, ImageShowActivity.this);
} else {
Toast.makeText(this,"您已禁止該權限,需要重新開啓",Toast.LENGTH_SHORT).show();
}
}
}