解决方案 »

  1.   

    圆角图片框
    package com.qiao.tiebatime.model;import android.content.Context;
    import android.graphics.Canvas;
    import android.graphics.Color;
    import android.graphics.Paint;
    import android.graphics.PaintFlagsDrawFilter;
    import android.graphics.Path;
    import android.graphics.Region;
    import android.util.AttributeSet;
    import android.widget.ImageView;//圆形头像
    public class CircleImageView extends ImageView { Path path;
    public PaintFlagsDrawFilter mPaintFlagsDrawFilter;// 毛边过滤
    Paint paint; public CircleImageView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    // TODO Auto-generated constructor stub
    init();
    } public CircleImageView(Context context, AttributeSet attrs) {
    super(context, attrs);
    // TODO Auto-generated constructor stub
    init();
    } public CircleImageView(Context context) {
    super(context);
    // TODO Auto-generated constructor stub
    init();
    } public void init() {
    mPaintFlagsDrawFilter = new PaintFlagsDrawFilter(0,
    Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG);
    paint = new Paint();
    paint.setAntiAlias(true);
    paint.setFilterBitmap(true);
    paint.setColor(Color.WHITE); } @Override
    protected void onDraw(Canvas cns) {
    // TODO Auto-generated method stub
    float h = getMeasuredHeight() - 3.0f;
    float w = getMeasuredWidth() - 3.0f;
    if (path == null) {
    path = new Path();
    path.addCircle(w / 2.0f, h / 2.0f,
    (float) Math.min(w / 2.0f, (h / 2.0)), Path.Direction.CCW);
    path.close();
    }
    cns.drawCircle(w / 2.0f, h / 2.0f, Math.min(w / 2.0f, h / 2.0f) + 1.5f,
    paint);
    int saveCount = cns.getSaveCount();
    cns.save();
    cns.setDrawFilter(mPaintFlagsDrawFilter);
    cns.clipPath(path, Region.Op.REPLACE);
    cns.setDrawFilter(mPaintFlagsDrawFilter);
    cns.drawColor(Color.WHITE);
    super.onDraw(cns);
    cns.restoreToCount(saveCount);
    }}
    获取帖子列表适配器
    package com.qiao.tiebatime.model;import java.util.List;
    import java.util.Map;import com.qiao.tiebatime.R;import android.content.Context;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseAdapter;
    import android.widget.TextView;//获取帖子列表适配器
    public class AdapterListViewPostList extends BaseAdapter { private List<Map<String, Object>> listItems; 
    private LayoutInflater listContainer; // 视图容器 public final class ListItemView { // 自定义控件集合 public TextView tv2, tv3, tv4, tv5;
    // public com.qiao.tiebatime.model.CircleImageView circleImageView;
    } public AdapterListViewPostList(Context context,
    List<Map<String, Object>> listItems) {
    listContainer = LayoutInflater.from(context); // 创建视图容器并设置上下文
    this.listItems = listItems;
    } public int getCount() {
    // TODO Auto-generated method stub
    return listItems.size();
    } public Object getItem(int arg0) {
    // TODO Auto-generated method stub
    return null;
    } public long getItemId(int arg0) {
    // TODO Auto-generated method stub
    return 0;
    } /**
     * ListView Item设置
     */
    public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
    // 自定义视图
    ListItemView listItemView = null;
    if (convertView == null) {
    listItemView = new ListItemView();
    // 获取list_item布局文件的视图
    convertView = listContainer.inflate(R.layout.list_item_post, null);
    // 获取控件对象 // listItemView.circleImageView =
    // (com.qiao.tiebatime.model.CircleImageView) convertView
    // .findViewById(R.id.imageView1); listItemView.tv2 = (TextView) convertView
    .findViewById(R.id.lip_textview2);
    listItemView.tv3 = (TextView) convertView
    .findViewById(R.id.lip_textview3);
    listItemView.tv4 = (TextView) convertView
    .findViewById(R.id.lip_textview4);
    listItemView.tv5 = (TextView) convertView
    .findViewById(R.id.lip_textview5); // 设置控件集到convertView
    convertView.setTag(listItemView);
    } else {
    listItemView = (ListItemView) convertView.getTag();
    } // 设置文字和图片
    // listItemView.circleImageView.setImageResource((Integer)
    // listItems.get(
    // position).get(R.drawable.icon));
    listItemView.tv2
    .setText((String) listItems.get(position).get("yonghu"));
    listItemView.tv3.setText((String) listItems.get(position)
    .get("shijian"));
    listItemView.tv4
    .setText((String) listItems.get(position).get("biaoti"));
    listItemView.tv5
    .setText((String) listItems.get(position).get("detail")); return convertView;
    }
    }
      

  2.   

      invalidate();你在每次画完的时候要调用下这个方法,它的将你画的UI清除重新画。。
      

  3.   

    1.不要在onDraw里面做圆,性能不行。
    圆型图片做一次就好,保存成bitmap或 Drawable,下次直接画。2.做圆的方法也不好,锯齿太大。
      

  4.   

    我没看到CircleImageView的onDraw中有clipRect方法被调用,可能是这个问题。
    onDraw的Canvas是从上层传下来的,如果你不剪裁显示区域的话,可能就会出现你运行时看到情况。
    楼主可以试试