package org.qii.weiciyuan.ui.userinfo;
import org.qii.weiciyuan.R;
import android.app.Dialog;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Rect;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.view.KeyEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import android.view.Window;
import android.widget.ImageView;
/**
* User: qii
* Date: 12-12-9
*/
public class UserAvatarDialog extends DialogFragment {
public static UserAvatarDialog newInstance(String path, Rect rect) {
UserAvatarDialog dialog = new UserAvatarDialog();
Bundle bundle = new Bundle();
bundle.putString("path", path);
bundle.putParcelable("rect", rect);
dialog.setArguments(bundle);
return dialog;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
String path = getArguments().getString("path");
final Rect ori = getArguments().getParcelable("rect");
Bitmap bitmap = BitmapFactory.decodeFile(path);
final View content = getActivity().getLayoutInflater()
.inflate(R.layout.useravatardialog_layout, null);
final ImageView avatar = ((ImageView) content.findViewById(R.id.imageview));
avatar.setImageBitmap(bitmap);
avatar.setClickable(true);
content.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
animateClose(avatar, ori);
}
});
Dialog dialog = new Dialog(getActivity(), R.style.UserAvatarDialog) {
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
animateClose(avatar, ori);
return true;
}
return super.onKeyDown(keyCode, event);
}
};
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(content);
content.getViewTreeObserver()
.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
content.getViewTreeObserver().removeOnGlobalLayoutListener(this);
if (ori == null) {
return;
}
int[] avatarLocation = new int[2];
avatar.getLocationOnScreen(avatarLocation);
final int transX = ori.left - avatarLocation[0];
final int transY = ori.top - avatarLocation[1];
final float scaleX = (float) ori.width() / (float) avatar.getWidth();
final float scaleY = (float) ori.height() / (float) avatar.getHeight();
avatar.setTranslationX(transX);
avatar.setTranslationY(transY);
avatar.setPivotX(0);
avatar.setPivotY(0);
avatar.setScaleX(scaleX);
avatar.setScaleY(scaleY);
avatar.animate().translationX(0).translationY(0).scaleY(1)
.scaleX(1).alpha(1.0f).setDuration(300)
.withEndAction(new Runnable() {
@Override
public void run() {
}
});
}
});
dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT);
return dialog;
}
private void animateClose(ImageView avatar, Rect ori) {
if (ori == null) {
return;
}
int[] avatarLocation = new int[2];
avatar.getLocationOnScreen(avatarLocation);
final int transX = ori.left - avatarLocation[0];
final int transY = ori.top - avatarLocation[1];
final float scaleX = (float) ori.width() / (float) avatar.getWidth();
final float scaleY = (float) ori.height() / (float) avatar.getHeight();
avatar.animate().translationX(transX).translationY(transY).scaleY(scaleY)
.scaleX(scaleX).alpha(0.7f).rotationY(0f).setDuration(300)
.withEndAction(new Runnable() {
@Override
public void run() {
dismissAllowingStateLoss();
}
});
}
}