本实例弹出窗口主要是继承PopupWindow类来实现的弹出窗体,布局可以根据自己定义设计。弹出效果主要使用了translate和alpha样式实现,具体实习如下:
第一步:设计弹出窗口xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:orientation="vertical"
>
<LinearLayout
android:id="@+id/pop_layout"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:orientation="vertical"
android:layout_alignParentBottom="true"
android:background="@drawable/btn_style_alert_dialog_background"
>
<Button
android:id="@+id/btn_take_photo"
android:layout_marginLeft="20dip"
android:layout_marginRight="20dip"
android:layout_marginTop="20dip"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="拍照"
android:background="@drawable/btn_style_alert_dialog_button"
android:textStyle="bold"
/>
<Button
android:id="@+id/btn_pick_photo"
android:layout_marginLeft="20dip"
android:layout_marginRight="20dip"
android:layout_marginTop="5dip"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="从相册选择"
android:background="@drawable/btn_style_alert_dialog_button"
android:textStyle="bold"
/>
<Button
android:id="@+id/btn_cancel"
android:layout_marginLeft="20dip"
android:layout_marginRight="20dip"
android:layout_marginTop="15dip"
android:layout_marginBottom="15dip"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="取消"
android:background="@drawable/btn_style_alert_dialog_cancel"
android:textColor="#ffffff"
android:textStyle="bold"
/>
</LinearLayout>
</RelativeLayout>
第二步:创建SelectPicPopupWindow类继承PopupWindow:
import android.app.Activity;
import android.content.Context;
import android.graphics.drawable.ColorDrawable;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.PopupWindow;
public class SelectPicPopupWindow extends PopupWindow {
private Button btn_take_photo, btn_pick_photo, btn_cancel;
private View mMenuView;
public SelectPicPopupWindow(Activity context,OnClickListener itemsOnClick) {
super(context);
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mMenuView = inflater.inflate(R.layout.alert_dialog, null);
btn_take_photo = (Button) mMenuView.findViewById(R.id.btn_take_photo);
btn_pick_photo = (Button) mMenuView.findViewById(R.id.btn_pick_photo);
btn_cancel = (Button) mMenuView.findViewById(R.id.btn_cancel);
//取消按钮
btn_cancel.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
//销毁弹出框
dismiss();
}
});
//设置按钮监听
btn_pick_photo.setOnClickListener(itemsOnClick);
btn_take_photo.setOnClickListener(itemsOnClick);
//设置SelectPicPopupWindow的View
this.setContentView(mMenuView);
//设置SelectPicPopupWindow弹出窗体的宽
this.setWidth(LayoutParams.FILL_PARENT);
//设置SelectPicPopupWindow弹出窗体的高
this.setHeight(LayoutParams.WRAP_CONTENT);
//设置SelectPicPopupWindow弹出窗体可点击
this.setFocusable(true);
//设置SelectPicPopupWindow弹出窗体动画效果
this.setAnimationStyle(R.style.AnimBottom);
//实例化一个ColorDrawable颜色为半透明
ColorDrawable dw = new ColorDrawable(0xb0000000);
//设置SelectPicPopupWindow弹出窗体的背景
this.setBackgroundDrawable(dw);
//mMenuView添加OnTouchListener监听判断获取触屏位置如果在选择框外面则销毁弹出框
mMenuView.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
int height = mMenuView.findViewById(R.id.pop_layout).getTop();
int y=(int) event.getY();
if(event.getAction()==MotionEvent.ACTION_UP){
if(y<height){
dismiss();
}
}
return true;
}
});
}
}
第三步:编写MainActivity类实现测试:
import android.app.Activity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;
public class MainActivity extends Activity {
//自定义的弹出框类
SelectPicPopupWindow menuWindow;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView tv = (TextView) this.findViewById(R.id.text);
//把文字控件添加监听,点击弹出自定义窗口
tv.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
//实例化SelectPicPopupWindow
menuWindow = new SelectPicPopupWindow(MainActivity.this, itemsOnClick);
//显示窗口
menuWindow.showAtLocation(MainActivity.this.findViewById(R.id.main), Gravity.BOTTOM|Gravity.CENTER_HORIZONTAL, 0, 0); //设置layout在PopupWindow中显示的位置
}
});
}
//为弹出窗口实现监听类
private OnClickListener itemsOnClick = new OnClickListener(){
public void onClick(View v) {
menuWindow.dismiss();
switch (v.getId()) {
case R.id.btn_take_photo:
break;
case R.id.btn_pick_photo:
break;
default:
break;
}
}
};
}
第四:运行效果如下:
- 大小: 25.4 KB
分享到:
相关推荐
在本教程中,我们将深入探讨如何利用`PopupWindow`实现从底部弹出或滑出的选择菜单或窗口,以及如何设置背景为灰色透明。 首先,我们需要理解`PopupWindow`的基本概念。`PopupWindow`是Android SDK中的一个类,它...
总的来说,实现"Android从屏幕底部弹出PopupWindow"涉及到Android UI组件、动画机制和事件处理等多个知识点,需要开发者具备扎实的Android基础和一定的动画设计能力。通过不断实践和学习,可以创造出更多富有创意的...
以上就是使用PopupWindow在Android中实现右侧、左侧和底部弹出菜单的基本流程。通过自定义布局、动画和交互,你可以创建出符合应用风格的个性化菜单。记得在实际开发中根据具体需求进行调整,确保弹出菜单的易用性和...
本文将深入探讨如何利用`PopupWindow`来实现从屏幕底部弹出的自定义效果,以及相关的编程技巧。 首先,了解`PopupWindow`的基本概念。`PopupWindow`是Android提供的一个类,它可以在当前Activity的视图之上显示一个...
- 底部弹出选项:在主界面下方弹出一系列操作选项,如微信聊天中的表情选择。 - 上拉菜单:在按钮上滑动出现更多功能,例如在搜索框右侧的下拉图标。 - 弹出提示:显示一些短暂的信息或操作确认。 3. **创建...
本案例聚焦于如何实现一个简单的、从底部滑出的PopupWindow,它能以动画形式展示菜单项,且易于集成到任何应用程序中。下面将详细介绍实现这个功能的关键知识点。 1. PopupWindow基础: PopupWindow是Android中的...
在Android开发中,`PopupWindow`是一个非常实用的组件,它可以用来实现各种弹窗效果,如下拉菜单、提示信息等。在这个项目中,我们将详细探讨如何使用`PopupWindow`来模仿微信应用中的弹出效果,使用户界面更加生动...
这个"popupWindow控件下面显示阴影实现和底部弹出pop.zip"资源包,显然包含了如何在PopupWindow下方添加阴影效果以及如何自定义底部弹出的PopupWindow的示例代码和教程。 首先,我们来详细了解PopupWindow的基本...
通常我们会选择Activity的根布局作为父视图,并将Gravity参数设为BOTTOM,使得PopupWindow从底部弹出。而隐藏PopupWindow则简单地调用dismiss()方法即可。 为了实现交互,需要监听PopupWindow中的按钮点击事件。这...
在安卓开发中,`PopupWindow` 是一个非常实用的组件,它可以用来创建浮动窗口,类似于弹出菜单或者对话框。这个压缩包中的示例代码,是关于如何使用 `PopupWindow` 模仿UC浏览器底部的菜单设计。我们将深入探讨 `...
在Android应用开发中,设计和实现用户界面是至关重要的,其中一种常见的交互方式就是底部弹出菜单。"仿QQ空间底部弹出菜单"是借鉴了QQ空间应用中的一个功能,它能够提供一种优雅的方式来展示多个操作选项,通常用于...
PopupWindow是Android SDK提供的一种轻量级窗口组件,它可以灵活地显示在屏幕的任意位置,非常适合用来创建弹出式菜单或提示。 首先,我们需要了解PopupWindow的基本用法。创建PopupWindow时,通常需要传入一个视图...
在Android开发中,`PopupWindow`是一个非常实用的组件,它可以用来创建弹出式窗口,类似于浮动对话框或下拉菜单。在这个项目中,我们将学习如何实现一个从底部滑动弹出的效果,就像我们在微信中看到的消息提示那样。...
在Android应用开发中,PopupWindow是一个非常重要的组件,它能够以弹出窗口的形式展示内容,类似于浮动对话框或下拉菜单。本项目“Android应用源码之PopupWindow模仿UC底部Menu”是针对这一功能的一个实例,它展示了...
在Android应用开发中,PopupWindow是一个非常重要的组件,它允许开发者在主界面之上显示一个临时的、可定制的视图,通常用于实现类似下拉菜单、提示信息或操作选择的效果。这个组件使得用户界面更加丰富多变,提升了...
在Android开发中实现BottomMenu,我们可以使用系统提供的`android.widget.PopupWindow`或者自定义布局配合`FragmentManager`来创建底部弹出窗口。下面我们将详细介绍这两种实现方式及其相关知识点。 ### 1. 使用`...
在许多应用中,底部弹出窗(如底部菜单或消息提示)提供了一种非侵入性的交互方式。我们可以自定义一个`PopupWindow`来实现这种效果。`PopupWindow`允许我们在屏幕上的任何位置显示一个视图,并且可以设置动画效果:...
这个示例项目中,PopupWindow被设计成底部弹出的样式,模拟了UC浏览器底部菜单的交互效果。通常这样的设计需要在用户触摸屏幕特定区域时显示,当用户点击其他地方或者再次触摸相同区域时隐藏。实现这种效果需要监听...