day4.29總結_友錄_設定圓圈和顯示連絡人的詳細資料

來源:互聯網
上載者:User

標籤:

一、顯示頭像

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();

}

});

}

 

 

 

 

 

 

 

day4.29總結_友錄_設定圓圈和顯示連絡人的詳細資料

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.