我是一个列表视图,我使用自定义布局来制作行。在每一行中,我都使用自定义imageView来舍入图像。这是班级:
public class RoundedImageView extends ImageView {
public RoundedImageView(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
public RoundedImageView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public RoundedImageView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
protected void onDraw(Canvas canvas) {
Drawable drawable = getDrawable();
if (drawable == null) {
return;
}
if (getWidth() == 0 || getHeight() == 0) {
return;
}
Bitmap b = ((BitmapDrawable) drawable).getBitmap();
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(),
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(Mode.SRC_IN));
canvas.drawBitmap(sbmp, rect, rect, paint);
return output;
}
}
如果上述代码没有在适配器中使用,则可以正常工作。
这是我的适配器代码:
public class ListAdapter extends BaseAdapter {
Activity activity;
public ArrayList<HashMap<String,String>> list;
public ListAdapter(Activity activity, ArrayList<HashMap<String, String>>list ) {
super();
this.activity=(Activity)activity;
this.list=list;
}
public int getCount() {
return contactList.size();
}
public Object getItem(int position) {
return contactList.get(position);
}
public long getItemId(int arg0) {
return 0;
}
private class ViewHolder {
ImageView imguser;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
LayoutInflater inflater = activity.getLayoutInflater();
if (convertView == null) {
convertView = inflater.inflate(R.layout.ads, null);
holder = new ViewHolder();
holder.imguser=(ImageView)convertView.findViewById(R.id.imguser);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
HashMap<String, String> item = contactList.get(position);
imageLoader.displayImage("http://192.168.1.35/test/usersPic/"+item.get("profileImg"), holder.imguser,
options, imageListener);
return convertView;
}
}
这是我得到的错误:
03-23 05:30:02.853: E/AndroidRuntime(1533): android.view.InflateException: Binary XML file line #12: Error inflating class com.tejarat.example.RoundedImageView
03-23 05:30:02.853: E/AndroidRuntime(1533): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:707)
03-23 05:30:02.853: E/AndroidRuntime(1533): at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
03-23 05:30:02.853: E/AndroidRuntime(1533): at android.view.LayoutInflater.rInflate(LayoutInflater.java:758)
03-23 05:30:02.853: E/AndroidRuntime(1533): at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
03-23 05:30:02.853: E/AndroidRuntime(1533): at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
03-23 05:30:02.853: E/AndroidRuntime(1533): at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
03-23 05:30:02.853: E/AndroidRuntime(1533): at com.tejarat.example.Fragment_C$ListAdapter.getView(Fragment_C.java:168)
03-23 05:30:02.853: E/AndroidRuntime(1533): at android.widget.AbsListView.obtainView(AbsListView.java:2177)
03-23 05:30:02.853: E/AndroidRuntime(1533): at android.widget.ListView.measureHeightOfChildren(ListView.java:1247)
03-23 05:30:02.853: E/AndroidRuntime(1533): at android.widget.ListView.onMeasure(ListView.java:1159)
03-23 05:30:02.853: E/AndroidRuntime(1533): at android.view.View.measure(View.java:15848)
03-23 05:30:02.853: E/AndroidRuntime(1533): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5012)
03-23 05:30:02.853: E/AndroidRuntime(1533): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)
03-23 05:30:02.853: E/AndroidRuntime(1533): at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
03-23 05:30:02.853: E/AndroidRuntime(1533): at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
03-23 05:30:02.853: E/AndroidRuntime(1533): at android.view.View.measure(View.java:15848)
03-23 05:30:02.853: E/AndroidRuntime(1533): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5012)
03-23 05:30:02.853: E/AndroidRuntime(1533): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
03-23 05:30:02.853: E/AndroidRuntime(1533): at android.view.View.measure(View.java:15848)
03-23 05:30:02.853: E/AndroidRuntime(1533): at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1451)
03-23 05:30:02.853: E/AndroidRuntime(1533): at android.view.View.measure(View.java:15848)
03-23 05:30:02.853: E/AndroidRuntime(1533): at android.widget.LinearLayout.measureVertical(LinearLayout.java:847)
03-23 05:30:02.853: E/AndroidRuntime(1533): at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
03-23 05:30:02.853: E/AndroidRuntime(1533): at android.view.View.measure(View.java:15848)
03-23 05:30:02.853: E/AndroidRuntime(1533): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5012)
03-23 05:30:02.853: E/AndroidRuntime(1533): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
03-23 05:30:02.853: E/AndroidRuntime(1533): at android.view.View.measure(View.java:15848)
03-23 05:30:02.853: E/AndroidRuntime(1533): at android.support.v4.widget.DrawerLayout.onMeasure(DrawerLayout.java:704)
03-23 05:30:02.853: E/AndroidRuntime(1533): at android.view.View.measure(View.java:15848)
03-23 05:30:02.853: E/AndroidRuntime(1533): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5012)
03-23 05:30:02.853: E/AndroidRuntime(1533): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)
03-23 05:30:02.853: E/AndroidRuntime(1533): at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
03-23 05:30:02.853: E/AndroidRuntime(1533): at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
03-23 05:30:02.853: E/AndroidRuntime(1533): at android.view.View.measure(View.java:15848)
03-23 05:30:02.853: E/AndroidRuntime(1533): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5012)
03-23 05:30:02.853: E/AndroidRuntime(1533): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
03-23 05:30:02.853: E/AndroidRuntime(1533): at android.view.View.measure(View.java:15848)
03-23 05:30:02.853: E/AndroidRuntime(1533): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5012)
03-23 05:30:02.853: E/AndroidRuntime(1533): at com.android.internal.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:302)
03-23 05:30:02.853: E/AndroidRuntime(1533): at android.view.View.measure(View.java:15848)
03-23 05:30:02.853: E/AndroidRuntime(1533): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5012)
03-23 05:30:02.853: E/AndroidRuntime(1533): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
03-23 05:30:02.853: E/AndroidRuntime(1533): at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2189)
03-23 05:30:02.853: E/AndroidRuntime(1533): at android.view.View.measure(View.java:15848)
03-23 05:30:02.853: E/AndroidRuntime(1533): at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1905)
03-23 05:30:02.853: E/AndroidRuntime(1533): at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1104)
03-23 05:30:02.853: E/AndroidRuntime(1533): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1284)
03-23 05:30:02.853: E/AndroidRuntime(1533): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1004)
03-23 05:30:02.853: E/AndroidRuntime(1533): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5481)
03-23 05:30:02.853: E/AndroidRuntime(1533): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)
03-23 05:30:02.853: E/AndroidRuntime(1533): at android.view.Choreographer.doCallbacks(Choreographer.java:562)
03-23 05:30:02.853: E/AndroidRuntime(1533): at android.view.Choreographer.doFrame(Choreographer.java:532)
03-23 05:30:02.853: E/AndroidRuntime(1533): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735)
03-23 05:30:02.853: E/AndroidRuntime(1533): at android.os.Handler.handleCallback(Handler.java:730)
03-23 05:30:02.853: E/AndroidRuntime(1533): at android.os.Handler.dispatchMessage(Handler.java:92)
03-23 05:30:02.853: E/AndroidRuntime(1533): at android.os.Looper.loop(Looper.java:137)
03-23 05:30:02.853: E/AndroidRuntime(1533): at android.app.ActivityThread.main(ActivityThread.java:5103)
03-23 05:30:02.853: E/AndroidRuntime(1533): at java.lang.reflect.Method.invokeNative(Native Method)
03-23 05:30:02.853: E/AndroidRuntime(1533): at java.lang.reflect.Method.invoke(Method.java:525)
03-23 05:30:02.853: E/AndroidRuntime(1533): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:73
你能帮我解决这个问题吗?
答案 0 :(得分:0)
刷新您的项目,只需检查xml中的自定义roundimageview是否会在您点击它时将其重定向到您的类文件。
答案 1 :(得分:0)
在getView()
方法中更改行:
holder.imguser=(ImageView)convertView.findViewById(R.id.imguser);
这一个:
holder.imguser=(RoundedImageView)convertView.findViewById(R.id.imguser);
可能存在其他问题,但目前可见这一问题。
答案 2 :(得分:0)
请检查传递参数:
imageLoader.displayImage("http://192.168.1.35/test/usersPic/"+item.get("profileImg"), holder.imguser,
options, imageListener);
选项??
您是否初始化了选项值。 请检查。
答案 3 :(得分:0)
如果你只是使用
mOptions = new DisplayImageOptions.Builder()
.cacheOnDisc(true)
.cacheInMemory(true)
.showImageForEmptyUri(R.drawable.noimage_round)
.showImageOnFail(R.drawable.noimage_round)
.bitmapConfig(Bitmap.Config.RGB_565)
.imageScaleType(ImageScaleType.IN_SAMPLE_INT)
.considerExifParams(true)
.displayer(new RoundedBitmapDisplayer(context.getResources().getDimensionPixelSize(R.dimen.adapter_main_width)))
.build();
和
mImageLoader.displayImage(searchImage, holder.sThumb, mOptions);
将创建圆形图像