欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android 新手引导蒙层效果实现代码示例

程序员文章站 2024-02-23 16:05:58
先上效果图: 这个效果一开始我是想直接让ui给个切图,后来发现这样不行,适配很差,达不到效果。所以就自己动手写代码,其实思路也很简单:在这个布局的父布局上面再手动...

先上效果图:

Android 新手引导蒙层效果实现代码示例

这个效果一开始我是想直接让ui给个切图,后来发现这样不行,适配很差,达不到效果。所以就自己动手写代码,其实思路也很简单:在这个布局的父布局上面再手动添加一个view(通常linearlayout比较方便),然后把这个linearlayout的背景设置成#88000000,之后就是给这个linearlayout动态增加子view,初步效果就能达到。

下面直接上代码:

public void showguideview() {

  view view = getwindow().getdecorview().findviewbyid(r.id.activity_main);
  if (view == null) return;

  viewparent viewparent = view.getparent();
  if (viewparent instanceof framelayout) {
    final framelayout frameparent = (framelayout) viewparent;//整个父布局

    final linearlayout linearlayout = new linearlayout(this);//新建一个linearlayout
    linearlayout.setlayoutparams(new linearlayout.layoutparams(viewgroup.layoutparams.match_parent, viewgroup.layoutparams.match_parent));
    linearlayout.setorientation(linearlayout.vertical);
    linearlayout.setbackgroundresource(#88000000);//背景设置灰色透明
    linearlayout.setgravity(gravity.center_horizontal);
    linearlayout.setonclicklistener(new view.onclicklistener() {
      @override
      public void onclick(view v) {
       frameparent.removeview(linearlayout);
      }
    });

    rect rect = new rect();
    point point = new point();
    nearby.getglobalvisiblerect(rect, point);
    //获得nearby这个控件的宽高以及xy坐标 nearby这个控件对应就是需要高亮显示的地方

    imageview topguideview = new imageview(this);
    topguideview.setlayoutparams(new viewgroup.layoutparams(rect.width(), rect.height())); 
     topguideview.setbackgroundresource(r.drawable.iv_topguide);

     rect rt = new rect();
     getwindow().getdecorview().getwindowvisibledisplayframe(rt);
    topguideview.sety(point.y - rt.top);//rt.top是手机状态栏的高度
    imageview bottomguideview = new imageview(this);
    bottomguideview.setlayoutparams(new viewgroup.layoutparams(wrap_content, wrap_content));
    bottomguideview.setbackgroundresource(r.drawable.iv_bottomguide);
    bottomguideview.sety(point.y + topguideview.getheight());

    linearlayout.addview(topguideview);
    linearlayout.addview(bottomguideview);
    frameparent.addview(linearlayout);
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。