Android :修改头像并使用Bmob保存(显示为圆形)

这几天再写一个项目 之前写登陆注册界面的时候都没有涉及到头像和数据库 所以都比较好实现 这次加上了头像的部分 可以实现和网上的第三方数据库的连接 第三方数据库我使用的是Bmob Bmob 主页

很方便 我们先看一下成果

所以这里面其实东西也还挺多的

所以这篇博客会从这几个方面去介绍如何完成的

1 Bmob的基础配置和注册登录的使用

2 点击修改Button可以出现相册 并且选择一个之后再显示到原来头像位置

3 把头像设置为圆形 选择新头像不论是什么形状都可以显示为圆形

4 上传头像到Bmob

5 觉得底下那两个Button好看的(我觉得挺好看的)嗯那个边框的实现

ok 开始吧:

一 Bmob的基础配置和注册登录的使用

Bmob的主页上面有链接 需要先注册一个账号然后第一次使用先看一下android Bmob快速入门

这个里面主要就是讲的第一次使用时需要配置的还有需要注意的东西

很详细但也需要注意很多地方

我写一下我遇到的一些问题

1.注意as是不需要复制包的 只需要在build里面写代码就可以了

但是千万不要把包导入重复了 比如他的大包里面就包含短信服务那个了 不需要再写了 写了就会出错

2 一定要在配置文件里加上允许联网操作的语句

3 一定要初始化Bmob 就是把密钥放在自己的oncreat( )里面

嗯 这是刚开始的这样子

下来就是要使用Bmob了 Bmob Android开发文档

开发文档很详细 可以仔细看看 我就以我这个项目的注册为例来看一下我是怎么使用的

首先我的用户除了用户名和密码之外还需要邮箱头像电话等信息

所以我继承了BmobUser 写了自己的用户类

注意 用户名和密码是不需要重写的

public class IpetUser extends BmobUser {
    private String emile;
    private Integer mobile;
    private BmobFile image;

    public void setEmile(String emile) {
        this.emile = emile;
    }

    public void setMobile(Integer mobile) {
        this.mobile = mobile;
    }

    public String getEmile() {
        return emile;
    }

    public Integer getMobile() {
        return mobile;
    }

    public void setImage(BmobFile image) {
        this.image = image;
    }

    public BmobFile getImage() {
        return image;
    }
}

头像使用的是BmobFile类型

至于怎么弄的 一会说到头像上传再看

 IpetUser user = new IpetUser();

然后通过user.set( )方法可以放入你输入的信息

再通过user.signUp( )注册就好了 挺简单的

这个部分就到这里 如果遇到什么问题可以讨论

二.点击修改Button可以出现相册 并且选择一个之后再显示到原来头像位置

我是使用系统自带相册

在修改按钮里面先是构建了一个intent对象

并将他的action 指定为Intent.ACTION_GET_CONTENT

然后设置必要的参数 通过 startActivityForResult(intent, 1);方法来打开相册程序选择照片了

看一下代码

 modify_head.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent();
                /* 开启Pictures画面Type设定为image */
                intent.setType("image/*");
                /* 使用Intent.ACTION_GET_CONTENT这个Action */
                intent.setAction(Intent.ACTION_GET_CONTENT);
                /* 取得相片后返回本画面 */
                startActivityForResult(intent, 1);
            }
        });

所以重点就在startActivityForResult(intent, 1); 里面

  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode == RESULT_OK) {
            Uri uri = data.getData();
            path = getImagePath(uri, null);
            ContentResolver cr = this.getContentResolver();
            try {
                Log.e("qwe", path.toString());
                Bitmap bitmap = BitmapFactory.decodeStream(cr.openInputStream(uri));

                /* 将Bitmap设定到ImageView */
               res_head.setImageBitmap(bitmap);
            } catch (FileNotFoundException e) {
                Log.e("qwe", e.getMessage(),e);
            }
        }
        super.onActivityResult(requestCode, resultCode, data);
    }
    private String getImagePath(Uri uri, String seletion) {
        String path = null;
        Cursor cursor = getContentResolver().query(uri, null, seletion, null, null);
        if (cursor != null) {
            if (cursor.moveToFirst()) {
                path = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA));
            }
            cursor.close();

        }
        return path;

    }

其中需要注意的是 path是图片的真实路径 因为在上传的时候需要真实路径

三. 把头像设置为圆形 选择新头像不论是什么形状都可以显示为圆形

这个本来是想自己写的但是在弄的过程中出现了一些问题所以就在git上用了一个

很方便

使用步骤这样的

1.在gradle里面

dependencies {
    ...
    compile ‘de.hdodenhof:circleimageview:2.0.0‘
}

2 使用在xml里面这样和imageView一样 最后两个属性是可以给图片加边框的

<de.hdodenhof.circleimageview.CircleImageView
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/head_image"
    android:layout_width="120dp"
    android:layout_height="120dp"
    android:src="@mipmap/cat"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="60dp"
    app:civ_border_width="0.5dp"
    app:civ_border_color="#4a9bec" />

在java代码中这样

 res_head = (CircleImageView)findViewById(R.id.head_image);

就好啦 准备过一段时间自己实现一个

嗯 到时候一定会实现的

四 上传头像到Bmob

恩恩恩恩恩恩恩恩恩恩恩 我昨天一个晚上都卡死在这里 每册就失败 打印出来原因一直都是filename empty

来看一下步骤、

1 在bmob上添加image列

2 构造BmobFile类型

 final BmobFile file=new BmobFile(Susername,null,new File(path).toString());

3 set进去user.setImage(file);

ok!!!!!!!!!!!!!

但是昨天我问题处在构造类型时只传进去一个参数

所以可以看一下构造方法 最后试了好多遍直到把三个参数都弄进去才注册成功

看一下没有注册之前的数据库

之后

然后那一列也有啦 image那一列只存储了filename 图片在文件里

大概就这样 实现了在Bmob存储图片

五.我觉得我写的Button还挺好看的

  <Button
            android:id="@+id/registre_button_signup"
            android:layout_weight="10"
            android:layout_width="0dp"
            android:textSize="15dp"
            android:hint="Sign up"
            android:background="@drawable/sign_button"
            android:layout_height="40dp" />

sign_button选择器因为点击是有效果的

<?xml version="1.0" encoding="utf-8"?>
<selector
    xmlns:android="http://schemas.android.com/apk/res/android">
    <item  android:state_pressed="false"
        android:drawable="@drawable/sign_seletor_nopressed"/>
    <item  android:state_pressed="true"
        android:drawable="@drawable/sign_seletor_pressed"/>
</selector>

sign_seletor_nopressed

<?xml version="1.0" encoding="UTF-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 连框颜色值 --><item>
    <shape>
        <solid android:color="#17abe3" />
        <corners android:radius="20dp" />

    </shape>
</item>
    <!-- 主体背景颜色值 -->
    <item android:bottom="1dp" android:right="1dp" android:top="1dp" android:left="1dp">
        <shape>
            <gradient android:startColor="#ffffff" android:centerColor="#ffffff"
                android:endColor="#ffffff" android:type="linear" android:angle="90"
                android:centerX="0.5" android:centerY="0.5" />

            <padding android:left="2dp" android:top="2dp" android:right="2dp"
                android:bottom="2dp" />
            <!-- 应该是圆角 -->
            <corners android:radius="20dp" />
        </shape>
    </item>
</layer-list>

sign_seletor_pressed

<?xml version="1.0" encoding="UTF-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 连框颜色值 --><item>
    <shape>
        <solid android:color="#17abe3" />
        <corners android:radius="20dp" />

    </shape>
</item>
    <!-- 主体背景颜色值 -->
    <item android:bottom="1dp" android:right="1dp" android:top="1dp" android:left="1dp">
        <shape>
            <gradient android:startColor="#7bbfea" android:centerColor="#7bbfea"
                android:endColor="#7bbfea" android:type="linear" android:angle="90"
                android:centerX="0.5" android:centerY="0.5" />

            <padding android:left="2dp" android:top="2dp" android:right="2dp"
                android:bottom="2dp" />
            <!-- 应该是圆角 -->
            <corners android:radius="20dp" />
        </shape>
    </item>
</layer-list>

这个部分over.

哦哦哦哦哦哦哦哦哦哦哦哦哦 有点乱

但是下次我就可以写有头像的注册登陆啦!

时间: 2024-11-08 22:18:21

Android :修改头像并使用Bmob保存(显示为圆形)的相关文章

Android 修改host文件的3种方法

Android修改hosts文件的方法介绍 本文介绍三种Android手机修改hosts文 件的方法,但修改hosts文件一定要谨慎:Android手机hosts文件的换行符必须是n而不是windows的rn,使用Notepad++打开 hosts文件,依次点击菜单中的“视图–显示符号–显示所有字符”,如果行末是LF就没问题,CR LF结束则需要替换所有的CR LF为LF. Android手机hosts文件路径:/system/etc/hosts 修改hosts方法一:需重启 修改host文件首

django -- ImageField 上传图片修改头像

django -- ImageField 上传图片修改头像 头像 Django ImageField 折腾了差不多一个星期的空闲时间,刚上手不久的 Django 为了上传个头像被弄得没了脾气 定义模型 model.py headImg = models.ImageField(upload_to = 'img', default="img/4.jpg") ImageField 是 Django 的内置数据类型,可以较方便的时间图片处理 upload_to 表示要上传到的目录,会在 med

phpcms 用户修改头像

做的项目用户的头像是存在ucenter里面,phpcms通过phpsso这个单点登录系统? 具体的我也不清楚,phpcms自带的v9_member表里没有存放用户头像的字段,如果需要修改,就要修改ucenter里的头像, 在phpcms里读取用户头像,也需要phpsso,通过它来链接ucenter 从而获取头像. 那么怎么通过在phpcms的控制器里,可以修改用户头像呢. 首先分为两个部分:1.上传头像,并且保存.2.将保存的头像生成缩略图,并且在指定位置生成缩略图. 生成的缩略图以后,上传的头

BBS(仿博客园系统)项目05(后台管理功能实现:文章添加、富文本编辑器使用、xss攻击、BeautifulSoup4模块、富文本编辑器上传图片、修改头像)

摘要 布局框架搭建 随笔添加 后台管理富文本编辑器KindEditor xss攻击 文章简介的截取,BeautifulSoup4模块 富文本编辑器上传图片 头像修改 一.后台管理框架布局搭建 后台管理布局框架分析:导航条.左侧功能区.右侧主要功能显示和实现区 实现: 导航条:使用bootstrap模板:JavaScript>>导航条 左侧:使用bootstrap模板:组件>>列表组 右侧:使用bootstrap模板:JavaScript>>标签页 新建后台管理路由(注意

Android -- TabHost、Fragment、状态保存、通信

工程结构                                                                                       TabAFm到TabEFm都是Fragment,并且每个Fragment对应一个布局文件. TabAFm.java                                                                             package com.yydcdut.tabho

修改配置文件matplotlibrc,让Matplotlib显示中文

matplotlib默认不支持中文显示,网上的解决办法有好多种,但是大多数都是通过在代码中指定字体,虽然也能实现,但是多出那么几行代码让人觉得很恶心. 本文介绍一种通过修改配置文件matplotlibrc,让Matplotlib显示中文的方法:在win7,Python2.7.9测试通过 第一步:将中文字体复制到matplotlib的字体目录中 中文字体以微软雅黑为例,在 C:\Windows\Fonts 下面找到“微软雅黑”字体.matplotlib默认安装在 %PythonPath%\Lib\

Android修改TitleBar标题栏详解

最近项目中把一个activity的theme设成了Dialog弹出框样式,发现标题栏高度和字体都太小,于是查了相关的资料和源码,总结了修改方法.高度是通过修改android:windowTitleSize,字体大小通过style修改. Android程序默认的Activity标题栏只能显示一段文字,而且不能改变它的布局.颜色.标题栏的高度等.如果想要在标题栏加上个图标. button.输入框.进度条.修改标题栏颜色等,只能使用自定义的标题栏.自定义标题栏可以通过在onCreate函数中添加以下代

(转)解决android开发人员,手机app图标显示不正确问题

android程序更换图标安装后不变解决办法 最近在搞android的时候发现,一开始程序使用系统默认图标,等到应用发布的时候要更换图标,结果在测试机上图标就是不变,其他手机和模拟器上都更新了图标. 测试机是小米,据说这个问题只在小米上会出现.网上查了原因说是miui会缓存图标,并且提供了两个解决方法 1.进入目录  /data/system/customized_icons 下,找到你原来的旧图标,删除即可.需要root权限 2.把当前的工程换一个包名,重新安装即可.换了包名等于是一个新的应用

android调用系统相机拍照并保存在本地

import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.Calendar; import java.util.Locale; import android.annotation.SuppressLint; import android.app.Activity; import an