这一章主要实现登陆和注册以及自定义Dialog还有圆形头像的实现
登陆
登陆注册主要依靠Bmob实现:首先创建一个类,添加除了用户名和密码以外的其他属性
public class MyUser extends BmobUser {
private String desc,sex;
private int age;
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
登陆的实现:
//通过RadioGroup选择性别监听事件的实现方法
mRadioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
if (checkedId == R.id.boy_radiobutton) {
Sex="男";
}else if (checkedId==R.id.girl_readbutton){
Sex="女";
}
}
});
//布局界面
<RadioGroup
android:id="@+id/mradiogrop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<RadioButton
android:id="@+id/boy_radiobutton"
android:text="男"
android:checked="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<RadioButton
android:id="@+id/girl_readbutton"
android:text="女"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</RadioGroup>
进行注册:
//获取EditText中的输入
Susername=username.getText().toString();
Sage= age.getText().toString();
Spassword=password.getText().toString();
Spassword2=password2.getText().toString();
Sdesc=desc.getText().toString();
Semil=emil.getText().toString();
//判断是否为空 用TextUtils中的方法
if (!TextUtils.isEmpty(Susername)&!TextUtils.isEmpty(Sage)&!TextUtils.isEmpty(Spassword)&!TextUtils.isEmpty(Spassword2)
&!TextUtils.isEmpty(Semil)){
//两次输入密码是否一致
if (Spassword.equals(Spassword2)){
//简介是否为空 如果为空填入默认值
if (TextUtils.isEmpty(Sdesc)){
Sdesc=getString(R.string.desc);
}
//创建对象调用方法
MyUser bu = new MyUser();
bu.setUsername(Susername);
bu.setPassword(Spassword);
bu.setEmail(Semil);
bu.setAge(Integer.parseInt(Sage));
bu.setSex(Sex);
bu.setDesc(Sdesc);
bu.signUp(new SaveListener<MyUser>() {
@Override
public void done(MyUser s, BmobException e) {
if (e == null) {
Toast.makeText(registerActivity.this,"注册成功",Toast.LENGTH_LONG).show();
finish();
} else {
Toast.makeText(registerActivity.this,e.toString(),Toast.LENGTH_LONG).show();
}
}
});
}else {
Toast.makeText(this,"两次密码请相同",Toast.LENGTH_LONG).show();
}
}else {
Toast.makeText(this,"请填写完整",Toast.LENGTH_LONG).show();
}
登陆的实现:
//获取输入框中的用户名和密码
Sname=name.getText().toString();
Spassword=password.getText().toString();
//创建对象调用方法
final MyUser bu2 = new MyUser();
bu2.setUsername(Sname);
bu2.setPassword(Spassword);
bu2.login(new SaveListener<MyUser>() {
public void done(MyUser bmobUser, BmobException e) {
dialog.dismiss();
if(e==null){
//if (bu2.getEmailVerified()){
Toast.makeText(Login_activity.this,"登陆成功",Toast.LENGTH_LONG).show();
startActivity(new Intent(Login_activity.this, MainActivity.class));
finish();
}else{
Toast.makeText(Login_activity.this,e.toString(),Toast.LENGTH_LONG).show(); }
}
});
记住密码的实现:
利用SharedPreferences实现,前面已经创建了SharedPreferences的封装类
//重写Activity的生命周期中的方法
protected void onDestroy() {
super.onDestroy();
//为SharedPreferences的isChecked节点创建一个默认值false
share.putBoolean(this,"isChecked",false);
//判断是否选中了记住密码
if (che_pass.isChecked()==true){
//创建节点输入记录数据
share.putString(this,"name",Sname);
share.putString(this,"password",Spassword);
//将isChecked改为true
share.putBoolean(this,"isChecked",true);
}
}
在Oncreat方法中实现(再次带开该页面用到):
//获取节点值
checkd=share.getBoolean(this,"isChecked");
//改变CheckBox的状态
che_pass.setChecked(checkd);
if (checkd==true){
name.setText(share.getString(this,"name"));
password.setText(share.getString(this,"password"));
}
自定义Dialog(不是很懂,看了一天也没理解,慢慢消化吧):
public class MyDialog extends Dialog {
//定义属性
public MyDialog(Context context,int width,int height,int layout,int style,int gravity,int anim){
super(context,style);
//设置属性
setContentView(layout);
Window window = getWindow();
WindowManager.LayoutParams layoutParams = window.getAttributes();
layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT;
layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
layoutParams.gravity = gravity;
window.setAttributes(layoutParams);
window.setWindowAnimations(anim);
}
创建:
dialog = new MyDialog(this, 100, 100, R.layout.dialog_login, R.style.Theme_dialog, Gravity.CENTER, R.style.Dialog_anim);
//不可点击Dialog以外的地方
dialog.setCancelable(false);
//显示
dialog.show();
//隐藏
dialog.dismiss();
圆形头像的实现:
gredle中导入
//CircleImageView
compile 'de.hdodenhof:circleimageview:2.1.0'
布局文件:
<de.hdodenhof.circleimageview.CircleImageView
android:id="@+id/profile_image"
android:layout_width="96dp"
android:layout_height="96dp"
android:src="@drawable/add_pic"
app:civ_border_color="@color/colorPrimary"
app:civ_border_width="2dp" />
从相册中选择图片并进行裁剪,用作头像:
跳转进相册
//action与Type属性
Intent intent=new Intent(ACTION_PICK);
intent.setType("image/*");
startActivityForResult(intent,REQUECT_pic);
重写方法:
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode){
//打开相册的请求码
case REQUECT_pic:
//返回一个uri类型的数据
startPhotoZoom(data.getData());
break;
//打开裁剪器的请求码
case RESULT_REQUEST_CODE: if (data != null){ setPic(data); } }
裁剪方法:
private void startPhotoZoom(Uri data) {
if (data==null){
Toast.makeText(getActivity(),"uri==null",Toast.LENGTH_LONG);
return;
}
L.i(data.toString());
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(data,"image/*");
//设置裁剪
intent.putExtra("crop", "true");
//裁剪宽高比例
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
//裁剪图片的质量
intent.putExtra("outputX", 320);
intent.putExtra("outputY", 320);
//发送数据
intent.putExtra("return-data", true);
//启动裁剪器
startActivityForResult(intent, RESULT_REQUEST_CODE);
L.i("启动裁剪器");
}
将裁剪好的图片设置为头像:
private void setPic(Intent data) {
Bundle bundle = data.getExtras();
if (bundle != null) {
Bitmap bitmap = bundle.getParcelable("data");
profile_image.setImageBitmap(bitmap);
}
}
图片保存到SharedPreferences
//保存图片到shareutils
public static void putImageToShare(Context mContext, ImageView imageView) {
BitmapDrawable drawable = (BitmapDrawable) imageView.getDrawable();
Bitmap bitmap = drawable.getBitmap();
//第一步:将Bitmap压缩成字节数组输出流
ByteArrayOutputStream byStream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 80, byStream);
//第二步:利用Base64将我们的字节数组输出流转换成String
byte[] byteArray = byStream.toByteArray();
String imgString = new String(Base64.encodeToString(byteArray, Base64.DEFAULT));
//第三步:将String保存shareUtils
ShareUtils.putString(mContext, "image_title", imgString);
}
//读取图片
public static void getImageToShare(Context mContext, ImageView imageView) {
//1.拿到string
String imgString = ShareUtils.getString(mContext, "image_title", "");
if (!imgString.equals("")) {
//2.利用Base64将我们string转换
byte[] byteArray = Base64.decode(imgString, Base64.DEFAULT);
ByteArrayInputStream byStream = new ByteArrayInputStream(byteArray);
//3.生成bitmap
Bitmap bitmap = BitmapFactory.decodeStream(byStream);
imageView.setImageBitmap(bitmap);
}
}