在我的应用程序中,我有一个由Picasso填写的ImageView:
Picasso.with(context).load("http://example.com/logo.png").into(imageView);
这很好用。但是,我想在每个ImageView的顶角添加一个按钮。显然,这意味着制作我自己的可重用实例。
我对接近它的最佳方式感到困惑。理想情况下,我想创建一个ImageView的子类来保留上面的语法和语义。 ("这是一个ImageView 加上一点。")但是,构建这种结构所需的XML需要以RelativeLayout或FrameLayout为根,我可以&#39 ; t指向ImageView子类。
我怎样才能有效地创建这样的子类?
答案 0 :(得分:1)
好的,由于ImageView不是一个视图组,你不能在imageview的子类中添加一个按钮。
我会通过创建一个视图来解决这个问题,该视图将是viewgroup ex的子类。帧/ Realtive / ETC-布局。
它将包含ImageView和Button以及方法 getImageView()。
然后你的毕加索电话会是: Picasso.with(上下文).load(" http://example.com/logo.png&#34)。到(mCustomView.getImageView());
--- ---编辑
好的因为我在我的移动写作上,我无法举一个例子。 这将为您提供可重复使用的视图,也可以通过编程方式进行膨胀。 您必须创建一个XML布局文件,以便您的自定义类充气。
public class MyCustomImageView extends FrameLayout {
private ImageView mImageView;
private Button mButton;
private Context mContext;
public MyCustomImageView(Context context, AttributeSet attrs) {
super(context, attrs);
this.mContext = context;
LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = layoutInflater.inflate(R.layout.custom_imageview, this);
mImageView = (ImageView) view.findViewById(R.id.iv_imgv);
mButton = (Button) view.findViewById(R.id.b_btn);
//mImageView.setOnClickListener( new OnClickListener(){...} );
//mButton.setOnClickListener( new OnClickListener(){...} );
}
//Return image view for image loading etc.
public ImageView getImageView(){
return this.mImageView;
}
//Add onClickListener for the button
public void setButtonOnClickListener(inListener){
mButton.setOnClickListener(inListener);
}
//If you want you can simulate this to be an image view
// Ex..
public void setImageDrawable(Drawable drawable){
iv.setImageDrawable(drawable);
}
}
这可以从XML布局中膨胀;
<com.example.packagename.customview.MyCustomImageView ... />
或以编程方式;
MyCustomImageView customview = new MyCustomImageView(context);
custom.setImageDrawable(drawable);
custom.setButtonOnclickListener(new OnClickListener(){...});