仿今日头条视频播放页(使用BottomSheetDialogFragment)
来源:互联网 发布:网络棋牌牛牛作弊器app 编辑:程序博客网 时间:2024/05/21 06:18
仿今日头条视频播放页,实现效果如下图:
可以拖动使之消失,也可以点击空白处使之消失,是不是很有趣呢?
第一次看到这种效果的时候,我直接蒙蔽了,这样要是用自定义ViewGroup来实现的话需要考虑一堆问题,然而,“上帝给我们关上一扇门的时候,一定为我们开了一扇窗!”,经过查阅大量的资料,发现在Google提供的Design包中有现成的可以实现相应效果的控件:
BottomSheetDialogFragment学习BottomSheetDialog 点击链接会有一个完整的例子哦,感谢作者的开源精神!
下面来看我的实现方式:
首先看下布局:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.marsjiang.myflipperbottomdialog.MainActivity"> <TextView android:layout_width="match_parent" android:layout_height="0dp" android:layout_gravity="center" android:layout_weight="1" android:gravity="center" android:text="别笑,我真的是视频"> </TextView> <View android:layout_width="match_parent" android:layout_height="2dp" android:background="@color/colorPrimaryDark"/> <LinearLayout android:id="@+id/ll_bottom" android:layout_width="match_parent" android:layout_height="0dp" android:layout_gravity="center" android:layout_weight="2" android:gravity="center"> <Button android:id="@+id/btn_comment" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="我是某一条评论"/> </LinearLayout></LinearLayout>
布局其实没啥好说的,只是我在会织布局的时候使用的是权重,以适应各种分辨率的屏幕。
接下来看核心类:
BottomSheetFragment
public class BottomSheetFragment extends BottomSheetDialogFragment {}继承了咱们的 BottomSheetDialogFragment,主要的目的就是方便我们的进一步封装,哈哈!
这个类找不到???
是因为你的打开姿势不对呢!引入库:
compile 'com.android.support:design:25.2.0'这样就可以找到了,下面我们继续来写代码:
构造方法如下,这里传进来底部先行布局的原因是,通过计算底部控件的高度,从未来设定底部BottomSheetDialogFragemnt的高度:
public static BottomSheetFragment getInstance(Context context, LinearLayout ll_bottom) { mContext = context; mll_bottom = ll_bottom; BottomSheetFragment fragment = new BottomSheetFragment(); return fragment; }
设定高度的代码如下:
@Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View ll_bottom_sheet_layout = inflater.inflate(R.layout.fragment_bottom_sheet, container, false); //设定弹出评论区域高度 ll_bottom_sheet = (CoordinatorLayout) ll_bottom_sheet_layout.findViewById(R.id.ll_bottom_sheet); ll_bottom_sheet.setLayoutParams(new CoordinatorLayout.LayoutParams(mll_bottom.getWidth(), mll_bottom.getHeight()));// mBehavior = BottomSheetBehavior.from(ll_bottom_sheet);// mBehavior.setPeekHeight(mll_bottom.getHeight()); return ll_bottom_sheet_layout; }
package com.marsjiang.myflipperbottomdialog.bottomsheet;import android.content.Context;import android.os.Bundle;import android.support.annotation.Nullable;import android.support.design.widget.BottomSheetBehavior;import android.support.design.widget.BottomSheetDialogFragment;import android.support.design.widget.CoordinatorLayout;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.LinearLayout;import android.widget.TextView;import com.marsjiang.myflipperbottomdialog.R;/** * BottomSheetFragment * Created by Jiang on 2016/9/28. */public class BottomSheetFragment extends BottomSheetDialogFragment { private CoordinatorLayout ll_bottom_sheet; private static Context mContext; private static LinearLayout mll_bottom; private BottomSheetBehavior mBehavior; public static BottomSheetFragment getInstance(Context context, LinearLayout ll_bottom) { mContext = context; mll_bottom = ll_bottom; BottomSheetFragment fragment = new BottomSheetFragment(); return fragment; } @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View ll_bottom_sheet_layout = inflater.inflate(R.layout.fragment_bottom_sheet, container, false); //设定弹出评论区域高度 ll_bottom_sheet = (CoordinatorLayout) ll_bottom_sheet_layout.findViewById(R.id.ll_bottom_sheet); int a = mll_bottom.getWidth(); int da = mll_bottom.getHeight(); ll_bottom_sheet.setLayoutParams(new CoordinatorLayout.LayoutParams(mll_bottom.getWidth(), mll_bottom.getHeight()));// mBehavior = BottomSheetBehavior.from(ll_bottom_sheet);// mBehavior.setPeekHeight(mll_bottom.getHeight()); return ll_bottom_sheet_layout; } @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); RecyclerView mRecyclerView = (RecyclerView) view.findViewById(R.id.rv_test); new ListAdapter(mRecyclerView); } private final class ListAdapter extends RecyclerView.Adapter<ListAdapter.ViewHolder> { public ListAdapter(RecyclerView recyclerView) { recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); recyclerView.setAdapter(this); } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { return new ViewHolder(LayoutInflater.from(getActivity()).inflate(R.layout.item_bottom, parent, false)); } @Override public void onBindViewHolder(ViewHolder holder, int position) { holder.textView.setText("item" + (++position)); } @Override public int getItemCount() { return 20; } class ViewHolder extends RecyclerView.ViewHolder { public final TextView textView; public ViewHolder(View itemView) { super(itemView); textView = (TextView) itemView.findViewById(R.id.textview); } } }}
MainActivity中的战士代码如下,封装好了之后仅仅只需要两行代码就可以实现啦!
public class MainActivity extends FragmentActivity { private Button btn_comment; private LinearLayout ll_bottom; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn_comment = (Button) findViewById(R.id.btn_comment); ll_bottom = (LinearLayout) findViewById(R.id.ll_bottom); btn_comment.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { BottomSheetFragment bottomSheetFragment = BottomSheetFragment.getInstance(MainActivity.this,ll_bottom); bottomSheetFragment.show(getSupportFragmentManager(), BottomSheetFragment.class.getSimpleName()); } }); }}
源码如下:
MyFlipperBottomDialog
阅读全文
0 0
- 仿今日头条视频播放页(使用BottomSheetDialogFragment)
- 仿今日头条视频播放JieCaoVideoPlayer
- 仿今日头条视频播放JieCaoVideoPlayer
- 仿今日头条视频播放JieCaoVideoPlayer
- Android 仿今日头条视频播放器实现(不使用节操哟)
- Android 仿今日头条的视频播放控件(使用开源库灰常简单)
- 一个高仿今日头条的视频播放器
- Android仿今日头条视频列表播放
- Android 仿今日头条的视频播放控件(几行代码快速实现)
- Android 仿今日头条的视频播放控件(几行代码快速实现)
- Android 仿今日头条的视频播放控件(几行代码快速实现)
- IJKPlayer的封装视频播放器封装,Swift编写。仿今日头条视频播放器。
- 仿今日头条视频显示效果
- 仿今日头条
- 仿今日头条
- 高仿今日头条(转载)
- 高仿今日头条(1)
- 高仿今日头条(2)
- LVS负载均衡
- 大数据学习入门难,中科天玑给初学者支几招
- jQuery 进行一些简单的表单验证
- 【bzoj2286】[Sdoi2011]消耗战
- 二分查找法的实现和应用汇总
- 仿今日头条视频播放页(使用BottomSheetDialogFragment)
- 【Spring笔记】(二)集合注入、注入的方法
- ArcGIS Pro:OSGB数据转换及发布服务流程
- poj2121
- Android 资源 style找不到AppCompat(v7)
- C++进阶
- Linux查看机器负载 【转】
- 后缀数组详解
- idea中svn无法导入问题(未找到系统文件)