目录
1、编辑点9图片: 左、上边的为拉伸区域,同时也是内容展示区域,右、下的绘制无效
1、编辑点9图片: 左、上边的为拉伸区域,同时也是内容展示区域,右、下的绘制无效
2、设置点9图片之前 studio配置
Module下build.gradle文件中
android {
aaptOptions {
cruncherEnabled = false
useNewCruncher = false
}
}
如果以上配置未起作用(编译不识别点9图片),则需要重新编译一下项目 或者在gradle.properties文件中随便更改东西,然后重新编译一下,以此唤醒常常智商不在线的Androidstudio
3、点9图片的绘制
以上配置好了以后重新绘制点9图片(我遇到的问题是,之前创建的.9图片无效 还会变形,以上配置一遍再按照这一步创建.9)
选中图片-->鼠标右键-->Creat 9-patch file...
主要是左上,放大图片,可以用鼠标描边,或者把鼠标拖到图片最上/下边(在图片左半部分),鼠标变成上下剪头中间夹一横的样子,然后拖动,控制竖向的拉伸区域,左右拉伸其余也是这样,把鼠标拖到图片最左/右边(在图片上半部分),鼠标变成左右剪头中间夹一横的样子,然后拖动.
4、.9图片的使用
在布局中使用.9图片,如果用做容器布局,切容器布局中有子View,建议以下方式处理布局
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<FrameLayout
android:id="@+id/lly_bg_9"
android:layout_width="303dp"
android:layout_height="wrap_content"
android:background="@drawable/bg_device_activity_pop" />
<RelativeLayout
android:id="@+id/lly_content"
android:layout_width="303dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:orientation="vertical">
</RelativeLayout>
</RelativeLayout>
FrameLayout(lly_bg_9)主要用于展示.9图片 RelativeLayout(lly_content)主要用于页面内容
这样写布局,绕开了容器设置.9图片后,内容展示受拉伸区域影响的问题,但是需要在代码中动态设置宽高,比如,把lly_content的宽高复赋值给lly_bg_9,以下为popupwindow的java设置,主要是View.post()代码块及里面的宽高设置代码,因为我只需要竖向拉伸,所以只设置了高度,之所以在 popupWindow.showAtLocation后面使用post,主要是考虑到post的运行机制,以及在Android进程不稳定的时候出现的渲染延迟等问题.
View viewPop = View.inflate(context, R.layout.popup_device_activity_promotion, null);
TextView tvCommint = viewPop.findViewById(R.id.tv_commit);
viewPop.setRotationY(5);
PopupWindow popupWindow = new PopupWindow(viewPop, LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT, false);
popupWindow.setFocusable(true); //该值为false时,点击弹窗框外面window不会消失,即使设置了背景也无效,只能由dismiss()关闭
popupWindow.setOutsideTouchable(false); //只有该值设置为true时,外层点击才有效
popupWindow.setBackgroundDrawable(new BitmapDrawable(context.getResources(), (Bitmap) null));
tvCommint.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
popupWindow.dismiss();
onWindowButtonClinckLisenter.onButtonClinck(v.getId());
}
});
LogUtil.I(TAG, "showAsDropDown");
popupWindow.showAtLocation(context.getWindow().getDecorView(), Gravity.CENTER, 0, 0);
RelativeLayout llyContent = viewPop.findViewById(R.id.lly_content);
LinearLayout llyBg_9 = viewPop.findViewById(R.id.lly_bg_9);
//同步点9背景布局与内容布局高度(点9图片作为容器背景时,会限制其子View的可展示区域大小,
// 只会在可拉伸区域展示内容,为了避免这个问题,创建一个平行容器作为内容展示容器)
llyContent.post(new Runnable() {
@Override
public void run() {
llyBg_9.post(new Runnable() {
@Override
public void run() {
llyBg_9.setMinimumHeight(llyContent.getHeight());
}
});
}
});