MainActivity.java 15.8 KB
package com.hjx.personalcenter.activity;

import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.provider.MediaStore;
import android.support.annotation.NonNull;
import android.support.v4.content.FileProvider;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.facebook.drawee.backends.pipeline.Fresco;
import com.facebook.drawee.generic.GenericDraweeHierarchy;
import com.facebook.drawee.generic.GenericDraweeHierarchyBuilder;
import com.facebook.drawee.generic.RoundingParams;
import com.facebook.drawee.interfaces.DraweeController;
import com.facebook.drawee.view.SimpleDraweeView;
import com.hjx.personalcenter.R;
import com.hjx.personalcenter.customdialog.HeadDialog;
import com.hjx.personalcenter.interfaces.DialogCallBack;
import com.hjx.personalcenter.util.AlertUtils;
import com.hjx.personalcenter.util.CropUtils;
import com.hjx.personalcenter.util.DialogPermission;
import com.hjx.personalcenter.util.FileUtil;
import com.hjx.personalcenter.util.PermissionUtil;
import com.hjx.personalcenter.util.SharedPreferenceMark;
import com.mylhyl.circledialog.CircleDialog;
import com.mylhyl.circledialog.callback.ConfigInput;
import com.mylhyl.circledialog.params.InputParams;
import com.mylhyl.circledialog.view.listener.OnInputClickListener;
import com.zaaach.toprightmenu.MenuItem;
import com.zaaach.toprightmenu.TopRightMenu;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity implements View.OnClickListener, DialogCallBack.CallBackView {
    private ImageView iv_imformatioan, iv_look_card, iv_setting, iv_sign, iv_sex;
    private TextView tv_edit_presoninfo, tv_sign,
            tv_username, tv_username1, tv_mygad, tv_sex, tv_useinfo_adress, tv_useinfo_birthday,
            tv_useinfo_qq, tv_useinfo_school, tv_useinfo_gender;
    private LinearLayout linel_mycuoti, linel_mynote, linel_mycollege, linel_myclass;
    private TopRightMenu mTopRightMenu;
    private boolean showIcon = true;
    private boolean dimBg = true;
    private boolean needAnim = true;
    private static final int REQUEST_CODE_TAKE_PHOTO = 1;
    private static final int REQUEST_CODE_ALBUM = 2;
    private static final int REQUEST_CODE_CROUP_PHOTO = 3;
    SimpleDraweeView mSimpleDraweeView;
    private File file;
    private Uri uri;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Fresco.initialize(this);
        setContentView(R.layout.activity_main);
        initView();
        initData();
        initLister();
    }

    private void initView() {
        iv_imformatioan = (ImageView) findViewById(R.id.iv_imformatioan);
        iv_look_card = (ImageView) findViewById(R.id.iv_look_card);
        tv_edit_presoninfo = (TextView) findViewById(R.id.tv_edit_presoninfo);
        iv_setting = (ImageView) findViewById(R.id.iv_setting);
        iv_sign = (ImageView) findViewById(R.id.iv_sign);
        tv_sign = (TextView) findViewById(R.id.tv_sign);
        //头像
        mSimpleDraweeView = (SimpleDraweeView) findViewById(R.id.iv_head);
        //初始化个人信息
        iv_sex = (ImageView) findViewById(R.id.iv_sex);
        tv_username = (TextView) findViewById(R.id.tv_username);
        tv_username1 = (TextView) findViewById(R.id.tv_username1);
        tv_mygad = (TextView) findViewById(R.id.tv_mygad);
        tv_sex = (TextView) findViewById(R.id.tv_sex);
        tv_useinfo_adress = (TextView) findViewById(R.id.tv_useinfo_adress);
        tv_useinfo_birthday = (TextView) findViewById(R.id.tv_useinfo_birthday);
        tv_useinfo_qq = (TextView) findViewById(R.id.tv_useinfo_qq);
        tv_useinfo_school = (TextView) findViewById(R.id.tv_useinfo_school);
        tv_useinfo_gender = (TextView) findViewById(R.id.tv_useinfo_gender);
        //跳转其他应用
        linel_mycuoti = (LinearLayout) findViewById(R.id.linel_mycuoti);
        linel_mynote = (LinearLayout) findViewById(R.id.linel_mynote);
        linel_mycollege = (LinearLayout) findViewById(R.id.linel_mycollege);
        linel_myclass = (LinearLayout) findViewById(R.id.linel_myclass);

    }

    private void initData() {
        //加载个人信息

        //初始化图片
        file = new File(FileUtil.getCachePath(this), "user-avatar.jpg");
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
            uri = Uri.fromFile(file);
        } else {
            //通过FileProvider创建一个content类型的Uri(android 7.0需要这样的方法跨应用访问)
            uri = FileProvider.getUriForFile(MyApplication.getContext(), "com.hjx.personalcenter", file);
        }

    }

    private void initLister() {
        iv_imformatioan.setOnClickListener(this);
        iv_look_card.setOnClickListener(this);
        tv_edit_presoninfo.setOnClickListener(this);
        iv_setting.setOnClickListener(this);
        iv_sign.setOnClickListener(this);
        mSimpleDraweeView.setOnClickListener(this);
        linel_mycuoti.setOnClickListener(this);
        linel_mynote.setOnClickListener(this);
        linel_mycollege.setOnClickListener(this);
        linel_myclass.setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.iv_imformatioan:
                Intent intent = new Intent();
                intent.setClass(MainActivity.this, FeedBackActivity.class);
                startActivity(intent);
                overridePendingTransition(R.anim.rightin, R.anim.rightout);
                break;
            case R.id.iv_look_card:
                Intent lookintent = new Intent();
                lookintent.setClass(MainActivity.this, ElectronicCardLookInfoActivity.class);
                startActivity(lookintent);
                overridePendingTransition(R.anim.rightin, R.anim.rightout);
                break;
            case R.id.tv_edit_presoninfo:
                Intent editintent = new Intent();
                editintent.setClass(MainActivity.this, ChangePresonalInfoActivity.class);
                startActivity(editintent);
                overridePendingTransition(R.anim.rightin, R.anim.rightout);
                break;
            case R.id.iv_head:
                HeadDialog.getInstance(this).show(getSupportFragmentManager(), "HeadDialog");
                break;
            case R.id.iv_setting:
                mTopRightMenu = new TopRightMenu(MainActivity.this);
                List<MenuItem> menuItems = new ArrayList<>();
                menuItems.add(new MenuItem(R.mipmap.blank, "切换账户"));
                menuItems.add(new MenuItem(R.mipmap.blank, "账户管理"));
                mTopRightMenu
                        .setHeight(150)     //默认高度480
                        .setWidth(320)      //默认宽度wrap_content
                        .showIcon(showIcon)     //显示菜单图标,默认为true
                        .dimBackground(dimBg)           //背景变暗,默认为true
                        .needAnimationStyle(needAnim)   //显示动画,默认为true
                        .setAnimationStyle(R.style.TRM_ANIM_STYLE)  //默认为R.style.TRM_ANIM_STYLE
                        .setOnMenuItemClickListener(new TopRightMenu.OnMenuItemClickListener() {
                            @Override
                            public void onMenuItemClick(int position) {
                                switch (position) {
                                    case 0:
                                        //清除数据
                                        Intent settingintent = new Intent();
                                        settingintent.setClass(MainActivity.this, LoginAndRegisterActivity.class);
                                        startActivity(settingintent);
                                        overridePendingTransition(R.anim.rightin, R.anim.rightout);
                                        break;
                                    case 1:
                                        Intent accontMintent = new Intent();
                                        accontMintent.setClass(MainActivity.this, AccountManagementActivity.class);
                                        startActivity(accontMintent);
                                        overridePendingTransition(R.anim.rightin, R.anim.rightout);
                                        break;
                                }
                            }
                        })
                        .addMenuList(menuItems)
                        .showAsDropDown(iv_setting, -250, 0);
                break;
            case R.id.iv_sign:
                new CircleDialog.Builder(this)
                        .setCanceledOnTouchOutside(false)
                        .setCancelable(true)
                        .setTitle("个性签名")
                        .setInputHint("请输入个性签名")
                        .setWidth(0.5f)
                        .configInput(new ConfigInput() {
                            @Override
                            public void onConfig(InputParams params) {
//                                params.inputBackgroundResourceId = R.drawable.bg_input;
                            }
                        })
                        .setNegative("取消", null)
                        .setPositiveInput("确定", new OnInputClickListener() {
                            @Override
                            public void onClick(String text, View v) {
                                if (text.equals("")) {
                                    AlertUtils.showToast(MainActivity.this, "请输入个性签名");
                                } else {
                                    tv_sign.setText(text);
                                }

                            }
                        })
                        .show();
                break;
            case R.id.linel_mycuoti:
                AlertUtils.showToast(this, "hhahahah ");
                break;
            case R.id.linel_mynote:
                AlertUtils.showToast(this, "hhahahah ");
                break;
            case R.id.linel_mycollege:
                AlertUtils.showToast(this, "hhahahah ");
                break;
            case R.id.linel_myclass:
                AlertUtils.showToast(this, "hhahahah ");
                break;
        }

    }
    //回调头像监听
    @Override
    public void heard(Context context, View v) {
        switch (v.getId()){
            //选择默认图片
            case R.id.oktakephone:
                AlertUtils.showToast(this, "您选择了默认图片 ");
                break;
            case R.id.canceltakephone:

                break;
            //拍摄和相册
            case R.id.take_pic:
                if (PermissionUtil.hasCameraPermission(MainActivity.this)) {
                    uploadAvatarFromPhotoRequest();
                }

                break;
            case R.id.xiangce:
                uploadAvatarFromAlbumRequest();
                break;

        }

    }

    //照相
    private void uploadAvatarFromPhotoRequest() {
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
        intent.putExtra(MediaStore.Images.Media.ORIENTATION, 0);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
        startActivityForResult(intent, REQUEST_CODE_TAKE_PHOTO);
    }

    //选择图库
    private void uploadAvatarFromAlbumRequest() {
        Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
        photoPickerIntent.setType("image/*");
        startActivityForResult(photoPickerIntent, REQUEST_CODE_ALBUM);
    }
    //回掉
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode != -1) {
            return;
        }
        if (requestCode == REQUEST_CODE_ALBUM && data != null) {
            Uri newUri;
            if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
                newUri = Uri.parse("file:///" + CropUtils.getPath(this, data.getData()));
            } else {
                newUri = data.getData();
            }
            if (newUri != null) {
                startPhotoZoom(newUri);
            } else {
                Toast.makeText(this, "没有得到相册图片", Toast.LENGTH_LONG).show();
            }
        } else if (requestCode == REQUEST_CODE_TAKE_PHOTO) {
            startPhotoZoom(uri);
        } else if (requestCode == REQUEST_CODE_CROUP_PHOTO) {
            uploadAvatarFromPhoto();
        }
    }

    private void uploadAvatarFromPhoto() {
        compressAndUploadAvatar(file.getPath());

    }
    private void compressAndUploadAvatar(String fileSrc) {


        //上传到服务器

        final File cover = FileUtil.getSmallBitmap(this, fileSrc);
        String mimeType = "image/*";
        //requestBody = RequestBody.create(MediaType.parse(mimeType), file);
        //String fileName = cover.getName();
        //HttpManager.getInstance().header(this, fileSrc);
        //photo = MultipartBody.Part.createFormData("portrait", fileName.substring(fileName.lastIndexOf("/") + 1, fileName.length()), requestBody);
        //Fresco设置圆形头像
        GenericDraweeHierarchyBuilder builder = new GenericDraweeHierarchyBuilder(getResources());
        GenericDraweeHierarchy hierarchy = builder
                .setDesiredAspectRatio(1f)
                .setFailureImage(R.mipmap.blank)
                //圆形头像
                .setRoundingParams(RoundingParams.asCircle())
                .build();

        //加载本地图片
        Uri uri = Uri.fromFile(cover);
        DraweeController controller = Fresco.newDraweeControllerBuilder()
                .setOldController(mSimpleDraweeView.getController())
                .setUri(uri)
                .build();
        mSimpleDraweeView.setHierarchy(hierarchy);
        mSimpleDraweeView.setController(controller);

    }

    public void startPhotoZoom(Uri uri) {
        Intent intent = new Intent("com.android.camera.action.CROP");
        intent.setDataAndType(uri, "image/*");
        intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
        intent.putExtra("crop", "true");// crop=true 有这句才能出来最后的裁剪页面.
        intent.putExtra("aspectX", 1);// 这两项为裁剪框的比例.
        intent.putExtra("aspectY", 1);// x:y=1:1
//        intent.putExtra("outputX", 400);//图片输出大小
//        intent.putExtra("outputY", 400);
        intent.putExtra("output", Uri.fromFile(file));
        intent.putExtra("outputFormat", "JPEG");// 返回格式
        startActivityForResult(intent, REQUEST_CODE_CROUP_PHOTO);
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        switch (requestCode) {

            case PermissionUtil.REQUEST_SHOWCAMERA:
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    // Permission Granted
                    uploadAvatarFromPhotoRequest();

                } else {
                    if (!SharedPreferenceMark.getHasShowCamera()) {
                        SharedPreferenceMark.setHasShowCamera(true);
                        new DialogPermission(this, "关闭摄像头权限影响扫描功能");

                    } else {
                        Toast.makeText(this, "未获取摄像头权限", Toast.LENGTH_SHORT)
                                .show();
                    }
                }
                break;
            default:
                super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        }
    }
}