Android开发之仿IOS版百度贴吧切换账号时的弹出视图
来源:互联网 发布:自动矢量化软件 编辑:程序博客网 时间:2024/04/28 23:30
因为时常玩百度贴吧,so,在看到贴吧切换账号时的弹出视图后,感觉很不错,在网上找了相关效果的代码,修改了一下,效果如图。
先来看主布局activity_main.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:background="@android:color/white" tools:context=".MainActivity" > <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:text="戳这里" /></RelativeLayout>很简单,就一个Button。
接下来看如何使用:
@Overridepublic void onClick(View v) {mButtonView=new BaseBottomView(this, R.layout.layout_bottom);mButtonView.findViewById(R.id.tv_content2).setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {Toast.makeText(MainActivity.this, "哦呵呵呵呵呵", Toast.LENGTH_SHORT).show();}});mButtonView.findViewById(R.id.tv_content3).setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {mButtonView.dismiss();}});mButtonView.setCancelable(true);mButtonView.show();}上面是Button的点击事件方法,可以看出,主要的代码就三句:
创建视图:
mButtonView=new BaseBottomView(this, R.layout.layout_bottom);设置是否可以通过点击阴影区域取消视图:
mButtonView.setCancelable(true);显示视图:
mButtonView.show();创建视图时主要提供两个参数,一个是我们的Context,另一个是视图布局。
我的视图布局代码如下,仿照贴吧那个做的:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@android:color/transparent" android:orientation="vertical" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="5dp" android:layout_marginRight="5dp" android:background="@drawable/text_view_border" android:orientation="vertical" > <TextView android:id="@+id/tv_content1" android:layout_width="match_parent" android:layout_height="50dp" android:gravity="center" android:text="是否要切换账号?" android:textColor="#A9A9A9" android:textSize="14sp" /> <View android:layout_width="match_parent" android:layout_height="1dp" android:background="#e0e0e0" /> <TextView android:id="@+id/tv_content2" android:layout_width="match_parent" android:layout_height="50dp" android:gravity="center" android:text="确定" android:textColor="#4169E1" android:textSize="20sp" /> </LinearLayout> <View android:layout_width="match_parent" android:layout_height="5dp" android:background="@android:color/transparent" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="5dp" android:layout_marginRight="5dp" android:layout_marginBottom="8dp" android:background="@drawable/text_view_border" > <TextView android:id="@+id/tv_content3" android:layout_width="match_parent" android:layout_height="50dp" android:gravity="center" android:text="取消" android:textColor="#4169E1" android:textSize="20sp" /> </LinearLayout></LinearLayout>下面来看BaseBottomView的实现代码:
import android.app.Activity;import android.content.Context;import android.view.Gravity;import android.view.LayoutInflater;import android.view.MotionEvent;import android.view.View;import android.view.ViewGroup;import android.view.animation.Animation;import android.view.animation.AnimationUtils;import android.widget.FrameLayout;import com.tony.buttonview.R;public class BaseBottomView {private final FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT, Gravity.BOTTOM);private Context context;protected ViewGroup contentContainer;private ViewGroup decorView;// activity的根Viewprivate ViewGroup rootView;// 附加View 的 根Viewprivate OnDismissListener onDismissListener;private boolean isDismissing;private Animation outAnim;//退出private Animation inAnim;//进入private int gravity = Gravity.BOTTOM;public BaseBottomView(Context context, int layoutId) {this.context = context;initViews();init();LayoutInflater.from(context).inflate(layoutId, contentContainer);}protected void initViews() {LayoutInflater layoutInflater = LayoutInflater.from(context);decorView = (ViewGroup) ((Activity) context).getWindow().getDecorView().findViewById(android.R.id.content);rootView = (ViewGroup) layoutInflater.inflate(R.layout.layout_basepickerview, decorView, false);rootView.setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT));contentContainer = (ViewGroup) rootView.findViewById(R.id.content_container);contentContainer.setLayoutParams(params);}protected void init() {inAnim = getInAnimation();outAnim = getOutAnimation();}/** * show的时候调用 * * @param view * 这个View */private void onAttached(View view) {decorView.addView(view);contentContainer.startAnimation(inAnim);}/** * 添加这个View到Activity的根视图 */public void show() {if (isShowing()) {return;}onAttached(rootView);}/** * 检测该View是不是已经添加到根视图 * * @return 如果视图已经存在该View返回true */public boolean isShowing() {View view = decorView.findViewById(R.id.outmost_container);return view != null;}public void dismiss() {if (isDismissing) {return;}// 消失动画outAnim.setAnimationListener(new Animation.AnimationListener() {@Overridepublic void onAnimationStart(Animation animation) {}@Overridepublic void onAnimationEnd(Animation animation) {decorView.post(new Runnable() {@Overridepublic void run() {// 从activity根视图移除decorView.removeView(rootView);isDismissing = false;if (onDismissListener != null) {onDismissListener.onDismiss(BaseBottomView.this);}}});}@Overridepublic void onAnimationRepeat(Animation animation) {}});contentContainer.startAnimation(outAnim);isDismissing = true;}public Animation getInAnimation() {int res = AnimateUtil.getAnimationResource(this.gravity, true);return AnimationUtils.loadAnimation(context, res);}public Animation getOutAnimation() {int res = AnimateUtil.getAnimationResource(this.gravity, false);return AnimationUtils.loadAnimation(context, res);}public BaseBottomView setOnDismissListener(OnDismissListener onDismissListener) {this.onDismissListener = onDismissListener;dismiss();return this;}public BaseBottomView setCancelable(boolean isCancelable) {View view = rootView.findViewById(R.id.outmost_container);if (isCancelable) {view.setOnTouchListener(onCancelableTouchListener);} else {view.setOnTouchListener(null);}return this;}private final View.OnTouchListener onCancelableTouchListener = new View.OnTouchListener() {@Overridepublic boolean onTouch(View v, MotionEvent event) {if (event.getAction() == MotionEvent.ACTION_DOWN) {dismiss();}return false;}};public View findViewById(int id) {return contentContainer.findViewById(id);}}
BaseBottomView的布局如下:
<?xml version="1.0" encoding="utf-8"?><FrameLayout android:id="@+id/outmost_container" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:clickable="true" android:background="@color/bgColor_overlay"> <FrameLayout android:id="@+id/content_container" android:layout_width="wrap_content" android:layout_height="wrap_content"> </FrameLayout></FrameLayout>实现原理很简单,喜欢的可以下载看看。
点这里!
0 0
- Android开发之仿IOS版百度贴吧切换账号时的弹出视图
- iOS开发:仿网易新闻首页多频道视图切换
- Android仿IOS 弹出框的实现
- 仿iOS原生弹出视图效果的 HUD的弹出动画
- android-仿iOS弹出框
- android 仿IOS弹出框
- Android仿IOS弹出框
- ios之旋转时视图切换
- iOS开发弹出半透明视图
- iOS开发弹出半透明视图
- Android自定义View之popupwindow进阶封装:高仿ios “item动画弹出”效果的popupwindow。
- iOS开发之多表视图滑动切换示例(仿"头条"客户端)
- iOS开发系列--视图切换
- iOS开发系列--视图切换
- iOS开发系列--视图切换
- iOS开发系列--视图切换
- iOS开发系列--视图切换
- iOS开发系列--视图切换
- java应用于二叉树层次输出和之字形输出的非递归实现
- 王小草【机器学习】笔记--分类算法之决策树
- muduo库的EventLoopThread类剖析
- github 使用方法
- docker commit 创建镜像
- Android开发之仿IOS版百度贴吧切换账号时的弹出视图
- SpringMVC4异常处理
- final类
- 通配符匹配
- 是时候养成记录的习惯了
- mybatis返回外键对象列的查询方法
- Spring Boot 动态数据源(多数据源自动切换)
- Android高级控件(四)——VideoView 实现引导页播放视频欢迎效果,超级简单却十分的炫酷
- 工业4.0介绍连接