在做网页设计时,前端设计人员会经常用到基于JS开发的遮罩层,并且背景半透明。这样的效果怎么样在Android上实现呢?这个实现并不困难,先来上效果图:

<ignore_js_op>

20121029222704.jpg (29.46 KB, 下载次数: 61)

下载附件  保存到相册

2013-5-3 15:29 上传

 

本实例源码下载:点击下载

PopMaskViewActivity代码:

[mw_shl_code=java,true]package com.sunchis.demo;

import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button;

public class PopMaskViewActivity extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main); 
         
        Button button = (Button) findViewById(R.id.button); 
        button.setOnClickListener(new OnClickListener() { 
            @Override 
            public void onClick(View v) { 
                // 弹出遮罩层 
                new DialogView(PopMaskViewActivity.this).show(); 
            } 
        }); 
    } 

[/mw_shl_code]

DialogView代码,该View实际上是对话框(Dialog)的自定义,通过单击按钮来触发Dialog的弹出,其样式的控制在style.xml中。

[mw_shl_code=java,true]package com.sunchis.demo;

import android.app.Activity; 
import android.app.Dialog; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.Window; 
import android.view.ViewGroup.LayoutParams; 
import android.widget.ImageView; 
import android.widget.LinearLayout;

public class DialogView { 
    private Dialog dialog; 
     
    public DialogView(Activity mActivity) { 
        dialog = new Dialog(mActivity, R.style.mask_dialog); 
        LinearLayout popView = (LinearLayout) LayoutInflater. 
                from(mActivity).inflate(R.layout.dialog_view, null); 
         
        // 关闭按钮 
        ImageView viewClose = (ImageView) popView.findViewById(R.id.win_close); 
        viewClose.setOnClickListener(new OnClickListener() { 
            @Override 
            public void onClick(View v) { 
                hide(); 
            } 
        }); 
         
        dialog.setContentView(popView,  
                new LinearLayout.LayoutParams( 
                        LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); 
        dialog.setFeatureDrawableAlpha(Window.FEATURE_OPTIONS_PANEL, 0); 
    } 
     
    public void show() { 
        dialog.show(); 
    } 
     
    public void hide() { 
        dialog.dismiss(); 
    } 
} [/mw_shl_code]

对话框(Dialog)样式style.xml代码,通过“new Dialog(context, theme)”方法进行设置。
[mw_shl_code=java,true]<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <!-- 模仿dialog的遮罩层属性 --> 
    <style name="mask_dialog" parent="@android:style/Theme.Dialog"> 
        <item name="android:windowIsFloating">true</item> 
        <item name="android:windowIsTranslucent">true</item> 
        <item name="android:windowNoTitle">true</item> 
        <item name="android:windowBackground">@null</item> 
        <item name="android:backgroundDimEnabled">true</item> 
    </style> 
</resources> [/mw_shl_code]

最后就是遮罩层的布局代码了:

[mw_shl_code=xhtml,true]<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:background="@drawable/dialog" 
    android:orientation="vertical" >

<LinearLayout 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:background="@drawable/title" >

<ImageView 
            android:id="@+id/win_close" 
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content" 
            android:src="@drawable/close" />

<TextView 
            android:id="@+id/win_title" 
            android:layout_width="wrap_content" 
            android:layout_height="match_parent" 
            android:layout_weight="1.05" 
            android:gravity="center" 
            android:text="@string/view_title" 
            android:textColor="#ffffff" 
            android:textSize="20sp" />

<ImageView 
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content" 
            android:src="@drawable/default_button" /> 
    </LinearLayout> 
</LinearLayout> [/mw_shl_code]

涉及到的部分图片素材就没有一一列出来,但都包含在源码包中,建议下载源进行研究和学习!

Android自定义遮罩层设计的更多相关文章

  1. [微信小程序]实现一个自定义遮罩层

    正文: 先上效果图: 点击按钮Show显示遮罩层,再次点击屏幕任何地方隐藏遮罩层; <button bindtap="showview">Show</button ...

  2. C# Winform 实现自定义半透明loading加载遮罩层

    在网页中通过div+css实现半透明效果不难,今天我们看看一种在winfrom中实现的方法: 效果图如下,正常时: 显示遮罩层时: 自定义遮罩层控件的源码如下: View Row Code 1 usi ...

  3. C# Winform 实现自定义半透明遮罩层介绍

    在网页中通过div+css实现半透明效果不难,今天我们看看一种在winfrom中实现的方法: 效果图如下,正常时: 显示遮罩层时: 自定义遮罩层控件的源码如下: View Row Code 1 usi ...

  4. Android UI设计--半透明效果对话框及activity(可做遮罩层)

    下面是style的一些属性及其解释 <style name="dialog_translucent" parent="@android:style/Theme.Di ...

  5. Android 遮罩层效果

    (用别人的代码进行分析) 不知道在开发中有没有经常使用到这种效果,所谓的遮罩层就是给一张图片不是我们想要的形状,这个时候我们就可以使用遮罩效果把这个图片变成我们想要的形状,一般使用最多就是圆形的效果, ...

  6. iOS 自定义相机带拍摄区域边框及半透明遮罩层(含源码)

    开始时准备封装成ViewController的相机,但是在不改我相机控件源码的情况下,使用者很难自定义UI.于是想到将相机核心功能封装到View里,暴露出功能方法给外面调用,调用者只需将LFCamer ...

  7. Mybatis学习之自定义持久层框架(二) 自定义持久层框架设计思路

    前言 上一篇文章讲到了JDBC的基本用法及其问题所在,并提出了使用Mybatis的好处,那么今天这篇文章就来说一下该如何设计一个类似Mybatis这样的持久层框架(暂时只讲思路,具体的代码编写工作从下 ...

  8. Android 遮罩层效果--制作圆形头像

    (用别人的代码进行分析) 不知道在开发中有没有经常使用到这种效果,所谓的遮罩层就是给一张图片不是我们想要的形状,这个时候我们就可以使用遮罩效果把这个图片变成我们想要的形状,一般使用最多就是圆形的效果, ...

  9. 基于Vue.js PC桌面端弹出框组件|vue自定义弹层组件|vue模态框

    vue.js构建的轻量级PC网页端交互式弹层组件VLayer. 前段时间有分享过一个vue移动端弹窗组件,今天给大家分享一个最近开发的vue pc端弹出层组件. VLayer 一款集Alert.Dia ...

随机推荐

  1. 嵌入式linux驱动开发之点亮led(驱动编程思想之初体验)

    这节我们就开始开始进行实战啦!这里顺便说一下啊,出来做开发的基础很重要啊,基础不好,迟早是要恶补的.个人深刻觉得像这种嵌入式的开发对C语言和微机接口与原理是非常依赖的,必须要有深厚的基础才能hold的 ...

  2. [USACO2004][poj1989]The Cow Lineup(乱搞)

    http://poj.org/problem?id=1989 题意:求一个序列的最短非子序列长度l,即长度小于l的所有数的排列都是原序列的子序列(不一定要连续的),求l得最小值. 分析: 我们从左到右 ...

  3. 第四十六课:MVC和MVVM的开发区别

    实现MVC的目的就是为了让M和V相分离.前端的MVC无法做到View和Model的相分离,而MVVM可以. 我们先来看一个用MVC模式开发的经典例子:(一定要深入了解这种开发的思想,而不是看懂代码) ...

  4. 无法加载协定为“ServiceReference1.xxxxx”的终结点配置部分,因为找到了该协定的多个终结点配置。请按名称指示首选的终结点配置部分

    原因是config节点中有多个endpoint相同节点,提示按名称指示首选的终结点,说明程序不知道选那个节点. 解决办法,实例化service服务对象时,通过name值指定创建它. config文件部 ...

  5. Linux下svn命令详解

    本文主要是说明linux下svn命令的使用方法,同时记录自己在使用中遇到的一些疑惑. 1.Linux命令行下将文件checkout到本地目录 svn checkout url(url是服务器上的目录) ...

  6. 转-sql中的case when的用法

    Case具有两种格式.简单Case函数和Case搜索函数. --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END ...

  7. js 选项卡实现

    <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8&quo ...

  8. Tomcat 使用说明

    Tomcat下有7个目录,分别是bin,conf,lib,logs,temp,webapps,work 目录 Tomcat根目录在tomcat中叫<CATALINA_HOME> 1.< ...

  9. bzoj 1193 贪心

    如果两点的曼哈顿距离在一定范围内时我们直接暴力搜索就可以得到答案,那么开始贪心的跳,判断两点横纵坐标的差值,差值大的方向条2,小的条1,不断做,直到曼哈顿距离较小时可以暴力求解. 备注:开始想的是确定 ...

  10. session实现防止重复提交,以及验证

    参考文档 1.生成Token的参考文档.http://www.cnblogs.com/TianFang/p/3180899.html 2.主要参考文档.http://www.cnblogs.com/x ...