.9图片的问题总结(Android studio制作):

目录

 1、编辑点9图片: 左、上边的为拉伸区域,同时也是内容展示区域,右、下的绘制无效

2、设置点9图片之前 studio配置

3、点9图片的绘制

4、.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());
                    }
                });
            }
        });

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值