day4.29总结_友录_设置圆圈和显示联系人的详细信息

一、显示头像


ContactAdapter

public View getView(int position, View convertView, ViewGroup parent) {

ViewHolder vh;

if(convertView==null){

convertView = inflater.inflate(R.layout.item_contact_layout, parent,false);

vh = new ViewHolder();

vh.ivAvatar = (ImageView) convertView.findViewById(R.id.iv_item_contact_avatar);

vh.tvName = (TextView) convertView.findViewById(R.id.tv_item_contact_username);

convertView.setTag(vh);

}else{

vh = (ViewHolder) convertView.getTag();

}

Contact contact = getItem(position);

vh.tvName.setText(contact.getName());

//根据contact对象的photo_id属性,去获得头像图片

if(position==0){

//如果是第一个联系人,头像用"加号"

vh.ivAvatar.setImageResource(R.drawable.ic_add_contact);

}else{

vh.ivAvatar.setImageBitmap(biz.getAvatar(contact.getPhoto_id()));

}

return convertView;

}

二、设置圆圈


ContactBiz

/**

* 业务类

* 关注所有项目中与“联系人”相关的内容

* @author pjy

*

*/

public class ContactBiz {

private Context context;

public ContactBiz(Context context){  传一个上下文,后面会用到

this.context = context;

}

/**

* 获取设备上所有的联系人信息

* 并且按照姓名排序

*

* @return

*/

public List<Contact> getAllContacts(){

List<Contact> list = YouluUtil.getAllContacts(context);

Collections.sort(list,new Comparator<Contact>() {根据名字排序

@Override

public int compare(Contact lhs, Contact rhs) {

return lhs.getName().toUpperCase().compareTo(rhs.getName().toUpperCase());

}

});

Contact contact = new Contact();

contact.setName("添加联系人");    添加符号也要给一个建一个对象

list.add(0,contact);

return list;

}

/**

* 获得头像图片

* @param photoId

* @return

*/

public Bitmap getAvatar(int photoId){

return YouluUtil.getAvatar(context,photoId);

}

public void showDetail(Contact contact) {

YouluUtil.showDetail(context,contact);

}

}


YouluUtil

public static Bitmap getAvatar(Context context, int photoId) {获取我的头像

Bitmap bitmap = null;

if(photoId==0){

//没有为联系人设置头像

//手动指定一个头像

//bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_launcher);

bitmap = getMyAvatar(context);

}else{

//有头像,DATA数据表中的data15列

ContentResolver cr = context.getContentResolver();

Cursor cursor = cr.query(Data.CONTENT_URI,

new String[]{Data.DATA15}, 根据Id查头像

Data._ID + " = ?",

new String[]{String.valueOf(photoId)},

null);

cursor.moveToNext();//指向第一条数据

byte[] bytes = cursor.getBlob(0);

//方形图

Bitmap avatar = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);

cursor.close();

bitmap = getCircleAvatar(context,avatar);

}

return bitmap;

}

private static Bitmap getCircleAvatar(Context context, Bitmap avatar) {

Bitmap bitmap = Bitmap.createBitmap(avatar.getWidth(), avatar.getHeight(),
Bitmap.Config.ARGB_8888
); 位图位数越高代表其可以存储的颜色信息越多,当然图像也就越逼真

Canvas canvas = new Canvas(bitmap);

Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);

paint.setColor(Color.BLACK);

float radius = Math.min(avatar.getWidth(), avatar.getHeight())/2;获取半径

//混合模式中的DST

canvas.drawCircle(avatar.getWidth()/2, avatar.getHeight()/2, radius , paint);

paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));设置前景后景模式

//混合模式中的SRC

canvas.drawBitmap(avatar, 0, 0, paint);

//画白边

paint.setColor(Color.WHITE);

paint.setStyle(Paint.Style.STROKE);

float strokeWidth = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 2,
context.getResources().getDisplayMetrics());屏幕的密度,类似分辨率

paint.setStrokeWidth(strokeWidth);

canvas.drawCircle(avatar.getWidth()/2, avatar.getHeight()/2, radius-strokeWidth/2, paint);

return bitmap;

}

/**

* 手动绘制一个头像出来

* 深灰色背景,前景白色文字“友录”

* @return

*/

private static Bitmap getMyAvatar(Context context) {

Bitmap bitmap = Bitmap.createBitmap(150, 150, Bitmap.Config.ARGB_8888);

//绘制图形需要2个对象

//画布Canvas

Canvas canvas = new Canvas(bitmap);

//画笔Paint

Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);

paint.setColor(Color.DKGRAY);

paint.setStyle(Style.FILL);

canvas.drawCircle(75, 75, 75, paint);

paint.setColor(Color.WHITE);

//sp--屏幕的密度-->px

int sp = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 12, context.getResources().getDisplayMetrics());

paint.setTextSize(sp);

Rect bounds = new Rect();

paint.getTextBounds("友录", 0, 2, bounds );

float x = 75 - bounds.width()/2;

float y = 75 + bounds.height()/2;

canvas.drawText("友录", x, y, paint);

//画白边

paint.setStyle(Paint.Style.STROKE);

float strokeWidth = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 2, context.getResources().getDisplayMetrics());

paint.setStrokeWidth(strokeWidth);

canvas.drawCircle(75, 75, 75-strokeWidth/2, paint);

return bitmap;

}

}

三、显示联系人的详细信息


YouluUtil

public static void showDetail(final Context context, final Contact contact) {

AlertDialog.Builder builder = new AlertDialog.Builder(context);

//标准的AlertDialog.Builder的写法

//buidler.setIcon/setTitle/setMessage/setPositiveButton/setNegativieButton

//buidler.create().show();

final AlertDialog dialog = builder.create();

dialog.show();

Window window = dialog.getWindow();

LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);找到系统的inflater

View view = inflater.inflate(R.layout.detail_layout, null);

window.setContentView(view);

ImageView ivAvatar = (ImageView) view.findViewById(R.id.iv_detail_avatar);

TextView tvName = (TextView) view.findViewById(R.id.tv_detail_name);

TextView tvNumber = (TextView) view.findViewById(R.id.tv_detail_number);

ivAvatar.setImageBitmap(getAvatar(context, contact.getPhoto_id()));

tvName.setText(contact.getName());

tvNumber.setText(contact.getNumber());

ImageView ivEdit = (ImageView) view.findViewById(R.id.iv_detail_edit);

ImageView ivClose = (ImageView) view.findViewById(R.id.iv_detail_close);

ivClose.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

dialog.dismiss();

}

});

ivEdit.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

//发送一个隐式intent,打开系统的联系人界面编辑contact的信息

Intent intent = new Intent(Intent.ACTION_EDIT);

Uri data = ContactsContract.Contacts.getLookupUri(contact.get_id(), contact.getLookupKey());

intent.setDataAndType(data , ContactsContract.Contacts.CONTENT_ITEM_TYPE);

intent.putExtra("finishActivityOnSaveCompleted", true);

context.startActivity(intent);

dialog.dismiss();

}

});

}

时间: 2024-10-07 17:57:48

day4.29总结_友录_设置圆圈和显示联系人的详细信息的相关文章

day4.28总结_友录_启动页面和联系人页面

一.启动页面 SplashActivity: public class SplashActivity extends Activity { RelativeLayout animaContainer; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_splash); initView

day5.03总结_友录_优化(异步和缓存和回调)

一.异步处理和添加监听器回调 YouluUtil public static void asyncGetAllContact2(final Context context,final OnLoadContactsFinishListener listener){                                               传一个监听器 new AsyncTask<Void, Void, List<Contact>>() { @Override pro

图形学_多边形扫描转换_边界标志算法

边界标志算法 1. 对多边形的每一条边进行扫描转换,即对多边形边界所经过的象素作一个边界标志. 2.填充 对每条与多边形相交的扫描线,按从左到右的顺序,逐个访问该扫描线上的象素. 取一个布尔变量inside来指示当前点的状态,若点在多边形内,则inside为真.若点在多边形外,则inside为假. Inside 的初始值为假,每当当前访问象素为被打上标志的点,就把inside取反.对未打标志的点,inside不变. 1 #include "easyx.h" 2 #include &qu

安卓开发_慕课网_百度地图_添加覆盖物

学习内容来自“慕课网” 本片学习内容接自前四篇基础 安卓开发_慕课网_百度地图 安卓开发_慕课网_百度地图_实现定位 安卓开发_慕课网_百度地图_实现方向传感器 安卓开发_慕课网_百度地图_实现模式转换 请先学习前4篇再学习本篇,因为本篇在前四篇的基础上进行代码的编写 一.新建一个类用来存放数据(距离,点赞数,介绍图等信息) 1 package com.example.map; 2 3 import java.io.Serializable; 4 import java.util.ArrayLi

安卓开发_慕课网_百度地图_实现模式转换

学习内容来自“慕课网” 模式转换,即地图的普通模式,罗盘模式,跟随模式之间的转换 学习内容接自前三篇 安卓开发_慕课网_百度地图 安卓开发_慕课网_百度地图_实现定位 安卓开发_慕课网_百度地图_实现方向传感器 一.模式转换通过菜单按钮来控制 所以添加对应的菜单项(红色字体部分) 1 <menu xmlns:android="http://schemas.android.com/apk/res/android" > 2 3 <item 4 android:id=&qu

安卓开发_慕课网_百度地图_实现方向传感器

学习内容来自“慕课网” 这里学习百度地图方向传感器功能 就是当转动手机的时候,地图上显示个人所在位置的图标的箭头变动 学习接自前两篇 安卓开发_慕课网_百度地图 安卓开发_慕课网_百度地图_实现定位 思路: 传感器随着定位的开始而开启,随着定位的结束而结束 传感器获得位置的移动而更新方向 代码在前两篇的基础上修改 一.讲原本坐标的图标改成箭头图标 二.引入方向传感器 首先增添MainActivity.java中的自定义图标和方向传感器代码 看红色字体的部分 1 package com.examp

鸟哥的Linux私房菜_基础版_学习笔记4:第八章 Linux磁盘与文件系统管理

8.1认识 EXT2 文件系统 8.1.1硬盘组成与分割的复习 各种接口的磁盘在Linux中的文件名分别为: /dev/sd[a-p][1-15]:为SCSI, SATA, U盘, Flash闪盘等接口的磁盘文件名: /dev/hd[a-d][1-63]:为 IDE 接口的磁盘文件名: 8.1.2文件系统特性 文件系统通常会将这两部份的数据分别存放在不同的区块,权限与属性放置到 inode 中,至于实际数据则放置到 data block 区块中. 另外,还有一个超级区块 (superblock)

系统管理模块_岗位管理_实现CRUD功能的具体步骤并设计Role实体

系统管理模块_岗位管理_实现CRUD功能的具体步骤并设计Role实体 1,设计实体/表 设计实体 --> JavaBean --> hbm.xml --> 建表 设计Role实体 1 public class Role { 2 private Long id; 3 private String name; 4 private String description; 5 public Long getId() { 6 return id; 7 } 8 public void setId(L

Spring_MVC_教程_快速入门_深入分析

Spring MVC 教程,快速入门,深入分析 博客分类: SPRING Spring MVC 教程快速入门 资源下载: Spring_MVC_教程_快速入门_深入分析V1.1.pdf SpringMVC核心配置文件示例.rar 作者:赵磊 博客:http://elf8848.iteye.com 目录 一.前言 二.spring mvc 核心类与接口 三.spring mvc 核心流程图 四.spring mvc DispatcherServlet说明 五.spring mvc 父子上下文的说明