package me.wavever.ganklock.ui.activity; import android.Manifest; import android.content.pm.PackageManager; import android.graphics.Bitmap; import android.os.Build; import android.os.Build.VERSION; import android.os.Build.VERSION_CODES; import android.os.Bundle; import android.support.design.widget.Snackbar; import android.support.v4.app.ActivityCompat; import android.support.v4.content.ContextCompat; import android.view.View; import android.view.View.OnClickListener; import android.view.Window; import android.view.WindowManager.LayoutParams; import android.view.animation.LinearInterpolator; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import com.squareup.picasso.Picasso; import java.io.File; import java.io.IOException; import me.wavever.ganklock.R; import me.wavever.ganklock.utils.LogUtil; import me.wavever.ganklock.utils.PhotoUtil; import me.wavever.ganklock.utils.SystemUtil; import me.wavever.ganklock.utils.UIUtil; import uk.co.senab.photoview.PhotoViewAttacher; import uk.co.senab.photoview.PhotoViewAttacher.OnViewTapListener; import static android.view.View.GONE; /** * Created by wavever on 2016/9/21. */ public class PhotoActivity extends BaseActivity implements OnClickListener { private static final String TAG = PhotoActivity.class.getSimpleName() + "-->"; public static final String KEY_PHOTO_URL = "key_photo_url"; public static final String KEY_PHOTO_ID = "key_photo_id"; public static final String KEY_ACTIVITY_JUMPED = "key_activity_jumped"; public static final int ACTIVITY_JUMPER_FROM_DAILY = 0; public static final int ACTIVITY_JUMPER_FROM_MEIZHI = 1; private static final int REQUEST_CODE_WRITE_EXTERNAL_STORAGE = 1; private ImageView mPhoto; private Bitmap mBitmap; private String mPhotoUrl; private String mPhotoID; private File mFile; private PhotoViewAttacher mAttacher; private LinearLayout mOptionLayout; private TextView mSend; private TextView mSetWallPaper; private TextView mSave; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //如果没有虚拟按键则设置为全屏 if (!UIUtil.isHasNavigationBar(this)) { getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LOW_PROFILE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN); } if (VERSION.SDK_INT >= VERSION_CODES.LOLLIPOP) { Window window = getWindow(); window.addFlags(LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); window.setStatusBarColor(R.color.black); } mAttacher = new PhotoViewAttacher(mPhoto); mAttacher.setOnViewTapListener(new OnViewTapListener() { @Override public void onViewTap(View view, float x, float y) { hideBottomOption(); } }); } @Override protected int loadView() { return R.layout.activity_photo; } @Override protected void initView() { mPhoto = (ImageView) findViewById(R.id.photo_view); mOptionLayout = (LinearLayout) findViewById(R.id.photo_bottom_option); mSave = (TextView) findViewById(R.id.photo_save); mSave.setOnClickListener(this); if (getIntent().getIntExtra(KEY_ACTIVITY_JUMPED, 0) == 0) { mOptionLayout.setVisibility(GONE); mPhotoUrl = getIntent().getStringExtra(KEY_PHOTO_URL); mPhotoID = getIntent().getStringExtra(KEY_PHOTO_ID); Picasso.with(this).load(mPhotoUrl).into(mPhoto); } else { mFile = (File) getIntent().getSerializableExtra(KEY_PHOTO_URL); mPhoto.setImageBitmap( PhotoUtil.decodeSampledBitmapFromFile(mFile.getAbsolutePath(), mPhoto.getWidth(), mPhoto.getHeight())); mSave.setVisibility(GONE); mSend = (TextView) findViewById(R.id.photo_share); mSend.setOnClickListener(this); mSetWallPaper = (TextView) findViewById(R.id.photo_wallpaper); mSetWallPaper.setOnClickListener(this); } new Thread(new Runnable() { @Override public void run() { try { //同步加载一张图片,注意只能在子线程中调用并且Bitmap不会被缓存到内存里. mBitmap = Picasso.with(PhotoActivity.this).load(mPhotoUrl).get(); } catch (IOException e) { e.printStackTrace(); } } }).start(); } boolean isHide; private void hideBottomOption() { if (!isHide) { mOptionLayout.animate() .translationY(mOptionLayout.getHeight()) .setInterpolator(new LinearInterpolator()); isHide = true; } else { mOptionLayout.animate().translationY(0).setInterpolator(new LinearInterpolator()); isHide = false; } } @Override public void onClick(View v) { switch (v.getId()) { case R.id.photo_share: PhotoUtil.sharePhoto(this, mFile); break; case R.id.photo_wallpaper: PhotoUtil.setWallPaper(this, mFile); Snackbar.make(mPhoto, "设置成功", Snackbar.LENGTH_SHORT).show(); break; case R.id.photo_save: if (SystemUtil.isNetworkAvailable()) { downLoadMeizhi(); } else { Snackbar.make(mPhoto, "好像没网哎~", Snackbar.LENGTH_SHORT).show(); } break; } } private void downLoadMeizhi() { LogUtil.d(TAG + Build.VERSION.SDK_INT); if (VERSION.SDK_INT < Build.VERSION_CODES.M) { PhotoUtil.savePhotoByBitmap(this, mBitmap, mPhotoID); return; } //没有授权 if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { //第二个参数是需要申请的权限的字符串数组,支持一次性申请多个权限的,系统会通过对话框逐一询问用户是否授权。 ActivityCompat.requestPermissions(this, new String[] { Manifest.permission.WRITE_EXTERNAL_STORAGE }, REQUEST_CODE_WRITE_EXTERNAL_STORAGE); } else { PhotoUtil.savePhotoByBitmap(this, mBitmap, mPhotoID); } } /** * 处理申请权限的回调 */ @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { switch (requestCode) { case REQUEST_CODE_WRITE_EXTERNAL_STORAGE: if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { PhotoUtil.savePhotoByBitmap(this, mBitmap, mPhotoID); } else { Snackbar.make(mPhoto, "我的天哪!拒绝了怎么存?", Snackbar.LENGTH_LONG).setAction("点错啦..", new View.OnClickListener() { @Override public void onClick(View v) { downLoadMeizhi(); } }).show(); } break; } } }