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 

最后上图:

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