Android实现底部缓慢弹出菜单
时间:2022-07-27
本文章向大家介绍Android实现底部缓慢弹出菜单,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
项目要求要做一个从底部缓慢弹出一个Button Menu
开始编码: MyselfFragment
package io.dcloud.H5B79C397.fragment;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.RelativeLayout;
import android.widget.Toast;
import com.android.volley.VolleyError;
import com.vanda.vandalibnetwork.fragment.BaseFragment;
import java.util.Map;
import cn.sharesdk.framework.ShareSDK;
import cn.sharesdk.onekeyshare.OnekeyShare;
import cn.sharesdk.sina.weibo.SinaWeibo;
import cn.sharesdk.tencent.qq.QQ;
import cn.sharesdk.wechat.friends.Wechat;
import cn.sharesdk.wechat.moments.WechatMoments;
import io.dcloud.H5B79C397.R;
import io.dcloud.H5B79C397.Urls;
import io.dcloud.H5B79C397.activity.BottomMenu;
import io.dcloud.H5B79C397.activity.LoginActivity;
import io.dcloud.H5B79C397.activity.Myself_About_fae;
import io.dcloud.H5B79C397.activity.Myself_Invitation;
import io.dcloud.H5B79C397.activity.Myself_help;
import io.dcloud.H5B79C397.activity.Myself_setting;
import io.dcloud.H5B79C397.activity.RegisterActivity;
import io.dcloud.H5B79C397.activity.user_management;
import io.dcloud.H5B79C397.pojo.InformmationData;
import io.dcloud.H5B79C397.util.ActionBarUtil;
import io.dcloud.H5B79C397.util.ExtUtils;
/**
* 用户个人信息界面
*/
public class MyselfFragment extends BaseFragment<InformmationData implements View.OnClickListener {
private Context mContext;
private View view;
private BottomMenu menuWindow;
private RelativeLayout layout_advise, layout_collect, layout_logo, layout_share, layout_qr_code, layout_help, layout_set, layout_url;
private Button btnLogin, btnRegister;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_information, container, false);
initView();
return view;
}
@Override
public void onStart() {
super.onStart();
}
private void initView() {
new ActionBarUtil(view, R.id.actionBar, R.id.Back, R.id.Title, R.id.Activity, "我的管理中心", getActivity(), 2);
layout_advise = (RelativeLayout) view.findViewById(R.id.myself_advise);
layout_collect = (RelativeLayout) view.findViewById(R.id.myself_collect);
layout_logo = (RelativeLayout) view.findViewById(R.id.myself_logo);
layout_share = (RelativeLayout) view.findViewById(R.id.myself_share);
layout_qr_code = (RelativeLayout) view.findViewById(R.id.myself_qr_code);
layout_help = (RelativeLayout) view.findViewById(R.id.myself_help);
layout_set = (RelativeLayout) view.findViewById(R.id.myself_set);
layout_url = (RelativeLayout) view.findViewById(R.id.myself_url);
btnLogin = (Button) view.findViewById(R.id.myself_login);
btnRegister = (Button) view.findViewById(R.id.myself_register);
layout_advise.setOnClickListener(this);
layout_collect.setOnClickListener(this);
layout_logo.setOnClickListener(this);
layout_share.setOnClickListener(this);
layout_qr_code.setOnClickListener(this);
layout_help.setOnClickListener(this);
layout_set.setOnClickListener(this);
layout_url.setOnClickListener(this);
btnLogin.setOnClickListener(this);
btnRegister.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.myself_advise:
startActivity(new Intent(getActivity(), user_management.class));
break;
case R.id.myself_collect:
break;
case R.id.myself_logo:
Intent intent=new Intent(getActivity(),Myself_About_fae.class);
startActivity(intent);
break;
case R.id.myself_share:
menuWindow = new BottomMenu(mContext, clickListener);
menuWindow.show();
break;
case R.id.myself_qr_code:
startActivity(new Intent(getActivity(), Myself_Invitation.class));
break;
case R.id.myself_help:
startActivity(new Intent(getActivity(), Myself_help.class));
break;
case R.id.myself_set:
startActivity(new Intent(getActivity(), Myself_setting.class));
break;
case R.id.myself_url:
Uri uri = Uri.parse("http://www.fae.cn/");
Intent intent1 = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent1);
break;
case R.id.myself_login:
startActivity(new Intent(getActivity(), LoginActivity.class));
break;
case R.id.myself_register:
startActivity(new Intent(getActivity(), RegisterActivity.class));
break;
default:
break;
}
}
private View.OnClickListener clickListener = new View.OnClickListener(){
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn1:
showZiDingYi(Wechat.NAME);
break;
case R.id.btn2:
showZiDingYi(WechatMoments.NAME);
Toast.makeText(mContext,"这是微信朋友圈",Toast.LENGTH_SHORT).show();
break;
case R.id.sina:
showZiDingYi(SinaWeibo.NAME);
break;
case R.id.QQ:
showZiDingYi(QQ.NAME);
break;
case R.id.more:
Toast.makeText(mContext,"这是更多",Toast.LENGTH_SHORT).show();
break;
default:
break;
}
}
};
private void showZiDingYi(String ss){
ShareSDK.initSDK(getActivity());
OnekeyShare oks = new OnekeyShare();
oks.setSilent(false);
oks.setDialogMode();
oks.setText("xxxxxxxxx");
//oks.setImageUrl("http://sharesdk.cn");
oks.setPlatform(ss);
oks.show(getActivity());
}
public static MyselfFragment newInstance(Context context) {
MyselfFragment fragment = new MyselfFragment();
fragment.mContext = context;
return fragment;
}
public MyselfFragment() {
// Required empty public constructor
}
@Override
protected void processData(InformmationData response) {
super.processData(response);
if (response != null) {
}
}
@Override
protected void errorData(VolleyError volleyError) {
super.errorData(volleyError);
ExtUtils.errorLog("-----MyselfFragment----volleyError--------- ", volleyError + "");
}
@Override
protected String getRequestUrl() {
return Urls.URL_PREFIX + "";
}
@Override
protected Class<InformmationData getResponseDataClass() {
return InformmationData.class;
}
@Override
protected Map<String, String getParamMap() {
return null;
}
}
BottomMenu
package io.dcloud.H5B79C397.activity;
import android.app.ActionBar;
import android.app.Activity;
import android.content.Context;
import android.graphics.drawable.ColorDrawable;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.PopupWindow;
import io.dcloud.H5B79C397.R;
import static io.dcloud.H5B79C397.R.id.btn1;
import static io.dcloud.H5B79C397.R.id.btn2;
/**
* Created by Administrator on 2017/7/21 0021.
*/
public class BottomMenu implements View.OnClickListener,View.OnTouchListener {
private PopupWindow popupWindow;
private Button wechat, friend,qq,sina,more ,btnCancel;
private View mMenuView;
private Activity mContext;
private View.OnClickListener clickListener;
public BottomMenu(Context context, View.OnClickListener clickListener) {
LayoutInflater inflater = LayoutInflater.from(context);
this.clickListener=clickListener;
mContext= (Activity) context;
mMenuView = inflater.inflate(R.layout.layout_popwindow, null);
wechat= (Button) mMenuView.findViewById(btn1);
friend= (Button) mMenuView.findViewById(btn2);
qq=(Button)mMenuView.findViewById(R.id.QQ) ;
sina=(Button)mMenuView.findViewById(R.id.sina);
more=(Button)mMenuView.findViewById(R.id.more);
btnCancel = (Button) mMenuView.findViewById(R.id.btn_cancel);
btnCancel.setOnClickListener(this);
wechat.setOnClickListener(this);
friend.setOnClickListener(this);
qq.setOnClickListener(this);
sina.setOnClickListener(this);
more.setOnClickListener(this);
popupWindow=new PopupWindow(mMenuView, ActionBar.LayoutParams.MATCH_PARENT, ActionBar.LayoutParams.WRAP_CONTENT,true);
popupWindow.setAnimationStyle(R.style.popwin_anim_style);
ColorDrawable dw = new ColorDrawable(context.getResources().getColor(R.color.apha));
popupWindow.setBackgroundDrawable(dw);
mMenuView.setOnTouchListener(this);
}
/**
* 显示菜单
*/
public void show(){
//得到当前activity的rootView
View rootView=((ViewGroup)mContext.findViewById(android.R.id.content)).getChildAt(0);
popupWindow.showAtLocation(rootView, Gravity.BOTTOM|Gravity.CENTER_HORIZONTAL, 0, 0);
}
@Override
public void onClick(View view) {
popupWindow.dismiss();
switch (view.getId()) {
case R.id.btn_cancel:
break;
default:
clickListener.onClick(view);
break;
}
}
@Override
public boolean onTouch(View arg0, 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){
popupWindow. dismiss();
}
}
return true;
}
}
layout_popwindow.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:layout_alignParentBottom="true"
android:gravity="center_horizontal"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:orientation="vertical"
<Button
android:background="#F2F2F2"
android:id="@+id/btn1"
android:layout_width="match_parent"
android:layout_height="40dp"
android:text="分享到微信好友"
android:textColor="@color/black"
/
<Button
android:id="@+id/btn2"
android:layout_width="match_parent"
android:layout_height="40dp"
android:text="分享到微信朋友圈"
android:layout_marginTop="5dp"
android:textColor="@color/black"
android:background="#F2F2F2"
/
<Button
android:id="@+id/QQ"
android:layout_width="match_parent"
android:layout_height="40dp"
android:text="分享到QQ"
android:layout_marginTop="5dp"
android:textColor="@color/black"
android:background="#F2F2F2"
/
<Button
android:id="@+id/sina"
android:layout_width="match_parent"
android:layout_height="40dp"
android:text="分享到新浪微博"
android:layout_marginTop="5dp"
android:textColor="@color/black"
android:background="#F2F2F2"
/
<Button
android:id="@+id/more"
android:layout_width="match_parent"
android:layout_height="40dp"
android:text="分享到更多..."
android:layout_marginTop="5dp"
android:textColor="@color/black"
android:background="#F2F2F2"
/
<Button
android:id="@+id/btn_cancel"
android:layout_width="match_parent"
android:layout_height="50dp"
android:text="取消"
android:layout_marginBottom="10dp"
android:layout_marginTop="15dp"
android:background="#F2F2F2"
android:alpha="100"
android:textStyle="bold" /
</LinearLayout
</RelativeLayout
包anim//放在res目录下其中包括ppwindow_hide_anim.xml和ppwindow_show_anim.xml 其中ppwindow_hide_anim.xml
<?xml version="1.0" encoding="utf-8"?
<set xmlns:android="http://schemas.android.com/apk/res/android"
<translate
android:duration="300"
android:fromXDelta="0"
android:toXDelta="0"
android:fromYDelta="0"
android:toYDelta="1920"
/
<alpha
android:duration="300"
android:fromAlpha="1"
android:toAlpha="0"
/
</set
其中ppwindow_show_anim.xml
<?xml version="1.0" encoding="utf-8"?
<set xmlns:android="http://schemas.android.com/apk/res/android"
<translate
android:duration="300"
android:fromXDelta="0"
android:toXDelta="0"
android:fromYDelta="1920"
android:toYDelta="0"
/
<alpha
android:duration="300"
android:fromAlpha="0"
android:toAlpha="1"
/
</set
最后上图:
以上就是本文的全部内容,希望对大家的学习有所帮助。
- 微信群之间消息自动转发简明教程(Github上免费共享有代码和教程)
- 使用CNN+ Auto-Encoder 实现无监督Sentence Embedding (代码基于Tensorflow)
- Flume日志收集系统架构详解
- 讨厌算法的程序员 | 第六章 归并排序
- 基于Spark /Tensorflow使用CNN处理NLP的尝试
- 一个优雅的框架 | Pytorch 初体验
- ffmpeg的时基
- FFmpeg菜鸡互啄#第7篇#文件/rtsp推流到rtmp
- H.264格式分析
- JS高级-数据结构的封装
- JS数组去重的三种方法
- 秒懂JS对象、构造器函数和原型对象之间的关系
- nginx rtmp server搭建
- 微信小程序-实战巩固(二)
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 腾讯云TKE使用
- 把redux当做观察者单独使用
- 用Spring Boot Admin来监控我们的微服务
- java+testNG测试框架搭建(接口测试或者ui测试)
- 解决Selenium testNG执行测试时,每个测试方法都打开一个浏览器窗口的问题
- selenium元素定位中css或者xpath不选择某一类元素
- TRTC横竖屏切换
- Swift 元祖
- Flutter - 解决混合开发iOS脚本打包遇到的问题
- Shader 特效 —— Film Burn (炫光光晕)效果【GLSL】
- java selenium chromedriver浏览器驱动放在哪里?【两种位置】
- 56. Vue原生js的组件拆分结构设计
- 一步一步教你把 Redux Saga 添加到 React&Redux 程序中
- Octave的基本语句及函数的使用入门—ML Note 31
- JAVA的Lock锁接口实现