Android下圖片變圓角的代碼封裝
main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<!-- <com.lian.image.SetImage
android:id="@+id/show"
android:layout_width="wrap_content"
android:layout_height="wrap_content" /> -->
<ListView
android:id="@+id/listview"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_marginLeft="50dp"
android:cacheColorHint="#000"
android:divider="#000"
android:dividerHeight="5px"
android:fadingEdge="none"
android:scrollbars="none"
android:scrollingCache="true" />
</LinearLayout>
package com.lian.image;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.PixelFormat;
import android.graphics.PorterDuff.Mode;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.widget.ImageView;
public class SetImage extends ImageView {
public SetImage(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
public SetImage(Context context, AttributeSet attrs) {
super(context, attrs, 0);
}
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
Path clipPath = new Path();
int w = this.getWidth();
int h = this.getHeight();
clipPath.addRoundRect(new RectF(0, 0, w, h), 10.0f, 10.0f, Path.Direction.CW);
canvas.clipPath(clipPath);
super.onDraw(canvas);
}
public void setImageDrawable(Drawable drawable, int pixels) {
// TODO Auto-generated method stub
Bitmap bitmap =toRoundCorner(drawableToBitmap(drawable), pixels);
Drawable drawable1 = new BitmapDrawable(bitmap);
super.setImageDrawable(drawable1);
}
public void setImageBitmap(Drawable drawable, int pixels) {
// TODO Auto-generated method stub
super.setImageBitmap(toRoundCorner(drawableToBitmap(drawable), pixels));
}
public static Bitmap toRoundCorner(Bitmap bitmap, int pixels) {
//創建一個和原始圖片一樣大小位圖
Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),
bitmap.getHeight(), Config.ARGB_8888);
//創建帶有位圖bitmap的畫布
Canvas canvas = new Canvas(output);
final int color = 0xff424242;
//創建畫筆
final Paint paint = new Paint();
//創建一個和原始圖片一樣大小的矩形
final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
final RectF rectF = new RectF(rect);
final float roundPx = pixels;
// 去鋸齒
paint.setAntiAlias(true);
canvas.drawARGB(0, 0, 0, 0);
paint.setColor(color);
//畫一個和原始圖片一樣大小的圓角矩形
canvas.drawRoundRect(rectF, roundPx, roundPx, paint);
//設置相交模式
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
//把圖片畫到矩形去
canvas.drawBitmap(bitmap, rect, rect, paint);
return output;
}
public static Bitmap drawableToBitmap(Drawable drawable){
int width = drawable.getIntrinsicWidth();
int height = drawable.getIntrinsicHeight();
//創建一個和原始圖片一樣大小位圖
Bitmap bitmap = Bitmap.createBitmap(width, height,
drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888
: Bitmap.Config.RGB_565);//創建一個指定高、寬的可變的Bitmap圖像
//創建帶有位圖bitmap的畫布
Canvas canvas = new Canvas(bitmap);
drawable.setBounds(0,0,width,height);
drawable.draw(canvas);
return bitmap;
}
}
package com.lian.image;
import java.util.ArrayList;
import java.util.HashMap;
import android.app.Activity;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
public class SetDrawable extends Activity {
private ArrayList<HashMap<String,Object>> data;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
/* Drawable drawable1 = getResources().getDrawable(R.drawable.benchi1);
SetImage imageView1 = (SetImage) findViewById(R.id.show);
imageView1.setImageDrawable(drawable1, 20);
imageView1.setImageBitmap(drawable1, 20);*/
data = getData();
ListView list = (ListView)findViewById(R.id.listview);
MyAdapter adapter = new MyAdapter(SetDrawable.this, data, R.layout.list);
list.setAdapter(adapter);
}
private ArrayList<HashMap<String,Object>> getData(){
ArrayList<HashMap<String,Object>> list = new ArrayList<HashMap<String,Object>>();
HashMap<String,Object> map = new HashMap<String,Object>();
for(int i = 0 ; i<100 ; i++){
map.put("show",R.drawable.benchi1);
list.add(map);
}
return list;
}
class ViewHolder{
public SetImage image;
}
class MyAdapter extends BaseAdapter{
//定義一個LayoutInflater來導入資料文件
LayoutInflater inflater;
//用來接管要綁定的數據
ArrayList<HashMap<String,Object>> arrayList;
//要綁定的資料文件id
int resID;
public MyAdapter(Context context,
ArrayList<HashMap<String, Object>> arrayList, int resID) {
this.inflater = LayoutInflater.from(context);
this.arrayList = arrayList;
this.resID = resID;
}
//綁定的數據的長度,也就是ListView項的個數
@Override
public int getCount() {
// TODO Auto-generated method stub
return this.arrayList.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
//創建一個ViewHolder來盛放控件
ViewHolder vHolder;
//經由過程斷定convertView是否為空來取得ViewHolder對象
//這個convertView就是ListView的一行
if (convertView == null) {
//若是為null則從布局文件中導入
convertView=inflater.inflate(resID, null);
vHolder=new ViewHolder();
vHolder.image = (SetImage)convertView.findViewById(R.id.show);
//setTag辦法用來設置與視圖接洽關系的標簽,我的懂得就是把和它相干的ViewHolder存儲起來,到用的時候再拿出來
convertView.setTag(vHolder);
}
else{
//若是不為null就直接經由過程getTag取出來
vHolder = (ViewHolder)convertView.getTag();
}
//然后給ViewHolder對象的每一項賦值 s
Drawable drawable1 = getResources().getDrawable(R.drawable.benchi1);
vHolder.image.setImageBitmap(drawable1, 20);
return convertView;
}
}
}
本文由用戶 dw23 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!