需求:纯代码RelativeLayout实现功能,一个popwindow放置一张图片,一个叉叉按钮放置到图片右上角;
效果图
思路:两个ImageView内置图片,添加到popwindow,设置叉叉位置到右上角;
简单说说几个坑
1,setBackgroundDrawable和setImageBitmap
android.view.View.setBackgroundDrawable这个方法会拉伸图片
2,ImageView和ImageButton
ImageButton有边框
3,实现思路:直接设置叉叉在图片右对齐,然后设置图片的setPadding,往左下的距离分别为叉叉宽高的一半(图片右上角和叉叉圆心重合,这样就比较好看)
//icon是图片
int iconID=1234;
iconImageView.setId(iconID);
exitParams.addRule(RelativeLayout.ALIGN_RIGHT,iconID);
exitParams.addRule(RelativeLayout.ALIGN_TOP,iconID);
4,因为采用了popwindow和RelativeLayout,如果设置叉叉相对popwindow右上角对齐的话,图片和叉叉之间会有空白,叉叉和图片相隔很远;
5,怎么避免那些坑?
设置popwindow的底色为blue,设置图片的底色red,设置叉叉的底色green,然后尝试上面的不同方法,设置不同的位置,看到效果就知道问题在哪里。
6,总结:布局问题,特别是相对布局问题,设置底色看效果,这是最显而易见的方式。
7,关键代码
public final static String TAG = FullWindow.class.getSimpleName();
private XImageView iconImageView;
public FullWindow(final Context context) {
super(context);
String iconURL = "http://avatar.csdn.net/8/E/A/1_codehxy.jpg";
FullWindow.this.setClickable(true);
FullWindow.this.setFocusable(true);
FullWindow.this.setLayoutParams(new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
final ImageView exitButton = new ImageView(context);
//创建广告
iconImageView = new XImageView(context,new ExitListener(){
@Override
public void show() {
exitButton.setImageBitmap(getBitmap("i/delete_64.png", context));//
}
});
exitButton.setBackgroundColor(Color.TRANSPARENT);
// exitButton.setBackgroundColor(Color.BLUE);//调试用的
RelativeLayout.LayoutParams exitParams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
int iconID=1234;
iconImageView.setId(iconID);
exitParams.addRule(RelativeLayout.ALIGN_RIGHT,iconID);
exitParams.addRule(RelativeLayout.ALIGN_TOP,iconID);
//添加广告到界面上
iconImageView.loadImage(context,iconURL);
FullWindow.this.addView(iconImageView);
//将退出按钮添加到界面上
FullWindow.this.addView(exitButton, exitParams);
//设置退出按钮点击监听事件
exitButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
PopWindowManager.removeFullWindow(context);
} catch (Exception e) {
e.printStackTrace();
}
}
});
//设置广告点击监听事件
iconImageView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
PopWindowManager.removeFullWindow(context);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
}
public interface ExitListener {
void show();
}
public static Bitmap getBitmap(String imgPath, Context context) {//注意这个context,图片需要放到宿主的src路径下,否则不能加载到
try {
InputStream inputStream = context.getClassLoader().getResourceAsStream(imgPath);
Bitmap bitmap=BitmapFactory.decodeStream(inputStream);
LogUtil.d(TAG, "getBitmap inputStream:"+ inputStream);
LogUtil.d(TAG, "getBitmap bitmap:"+ bitmap);
return bitmap;
} catch (Exception e) {
LogUtil.d(TAG, "getBitmap Exception:"+ e);
e.printStackTrace();
}
return null;
}