1、主布局 就是ListView
<ListView android:id="@+id/lv" android:layout_width="match_parent" android:layout_height="match_parent"></ListView>
2、给每一个ListView'的Item项写布局 文件名叫 item
<com.baway.circle.RoundImageView android:id="@+id/rv" android:layout_width="100dp" android:layout_height="100dp" />
引用了画图片的那个类
3、定义画图的类
package com.baway.circle; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.PorterDuff; import android.graphics.PorterDuffXfermode; import android.graphics.Rect; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.widget.ImageView; /** * Created by 王秋旺 on 2016/6/7. */ public class RoundImageView extends ImageView { public RoundImageView(Context context) { super(context); } public RoundImageView(Context context, AttributeSet attrs) { super(context, attrs); } public RoundImageView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); Drawable drawable = getDrawable(); if (drawable == null) { return; } if (getWidth() == 0 || getHeight() == 0) { return; } Bitmap b = ((BitmapDrawable)drawable).getBitmap(); if(null == b) { return; } Bitmap bitmap = b.copy(Bitmap.Config.ARGB_8888, true); int w = getWidth(), h = getHeight(); //调用 Bitmap roundBitmap = getCroppedBitmap(bitmap, w); canvas.drawBitmap(roundBitmap, 0,0, null); } public static Bitmap getCroppedBitmap(Bitmap bmp, int radius) { Bitmap sbmp; if(bmp.getWidth() != radius || bmp.getHeight() != radius) sbmp = Bitmap.createScaledBitmap(bmp, radius, radius, false); else sbmp = bmp; Bitmap output = Bitmap.createBitmap(sbmp.getWidth(), sbmp.getHeight(), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(output); final int color = 0xffa19774; final Paint paint = new Paint(); final Rect rect = new Rect(0, 0, sbmp.getWidth(), sbmp.getHeight()); paint.setAntiAlias(true); paint.setFilterBitmap(true); paint.setDither(true); canvas.drawARGB(0, 0, 0, 0); paint.setColor(Color.parseColor("#BAB399")); canvas.drawCircle(sbmp.getWidth() / 2+0.7f, sbmp.getHeight() / 2+0.7f, sbmp.getWidth() / 2+0.1f, paint); paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); canvas.drawBitmap(sbmp, rect, rect, paint); return output; } }
4、MainActivity中的内容
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ListView lv= (ListView) findViewById(R.id.lv); List<Integer> img_list=new ArrayList<>(); img_list.add(R.mipmap.aaa); img_list.add(R.mipmap.bbb); img_list.add(R.mipmap.ccc); img_list.add(R.mipmap.ddd); lv.setAdapter(new MyAdapter(MainActivity.this,img_list)); } }
5、适配器里面的内容
package com.baway.circle.adapter; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.drawable.Drawable; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import com.baway.circle.R; import com.baway.circle.RoundImageView; import java.util.List; import static android.view.View.*; /** * Created by 王秋旺 on 2016/6/7. */ public class MyAdapter extends BaseAdapter{ private Context context; private List<Integer> img_list; public MyAdapter(Context context,List<Integer> img_list){ this.context=context; this.img_list=img_list; } @Override public int getCount() { return img_list.size(); } @Override public long getItemId(int position) { return position; } @Override public Object getItem(int position) { return img_list.get(position); } @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView==null){ convertView=View.inflate(context,R.layout.item,null); } RoundImageView rv= (RoundImageView) convertView.findViewById(R.id.rv); Bitmap bm=BitmapFactory.decodeResource(context.getResources(),img_list.get(position)); Bitmap bitmap = RoundImageView.getCroppedBitmap(bm, 400); rv.setImageBitmap(bitmap); return convertView; } }