纯代码RelativeLayout实现右上角布局

需求:纯代码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;
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值