android 仿新浪微博转发 评论悬浮框的功能
来源:互联网 发布:优衣库淘宝假货 编辑:程序博客网 时间:2024/06/05 08:43
可能这个标题会误导大家,但是又知道博客标题起什么好,微博相信大家都很爱玩,而且微博很多好玩的东西,为我们无聊的生活添加点乐趣,微博正文有个功能就是我们向下拖动的时候,标题栏下面会悬挂一个评论.转发,赞,的功能,当我们向上滑动到一定高度后这个又自动消失,如图:
无行中逛泡在网上的日子 这个论坛,看到关于这篇文章,就下载下来了,看了相关代码,发现设计的很巧妙,可能我们会想通过什么自定义来实现,现在简单的画一个图分析它的实现方式:
这个关键是在2这个部分,现在我们布局文件贴下,然后分析:
<com.zhimore.myscrollview.view.TopView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/custom_top_view" android:layout_width="match_parent" android:layout_height="match_parent" > <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ImageView android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/meinv" android:contentDescription="@string/app_name" /> <FrameLayout android:id="@+id/top" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#66ffffff" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:padding="5dp" > <EditText android:id="@+id/et" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_weight="1" android:gravity="center" android:hint="请输入你想搜的内容" android:textSize="14sp" /> <Button android:id="@+id/btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/body_bg" android:layout_gravity="center_vertical" android:text="一键搜索" android:padding="11dp" android:layout_marginLeft="10dp" /> </LinearLayout> </FrameLayout><com.zhimore.myscrollview.view.ScrollViewListView android:id="@+id/listview" android:layout_width="fill_parent" android:layout_height="fill_parent" android:scrollbars="none" android:dividerHeight="1dp" android:divider="#e5e5e5" android:background="#ffffff" ></com.zhimore.myscrollview.view.ScrollViewListView> </LinearLayout></com.zhimore.myscrollview.view.TopView>
分析:
1:首先TopView会获取它的根布局 然后移除所有它的子view,创建一个ScrollerView,我们知道ScrollerView要有一个根布局,就把刚才获取TopView的根布局添加到ScrollerView中,然后把ScrollerView添加到TopView中,这样整个界面就可以滑动了
2:在图上面2部分如果向下滑动到这个搜索部分(也就是2部分),这个搜索布局就会悬挂在标题栏下面,现在我们有ScrollerView,它有个onScrollChanged()方法可以判断我们向上滑动了多少距离,这样时候就要算出搜索布局离上面的top是多少进行判断,如果滑动的距离大于这个向上的距离,搜索布局就悬挂在标题栏下面,否则就在原来位置显示,
现在把相关代码贴下:
MainActivity.java
package com.zhimore.myscrollview;import com.zhimore.myscrollview.view.ScrollViewListView;import com.zhimore.myscrollview.view.TopView;import android.app.Activity;import android.graphics.Color;import android.os.Bundle;import android.view.Gravity;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.TextView;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ScrollViewListView listview = (ScrollViewListView) findViewById(R.id.listview);listview.setAdapter(new MyAdapter());TopView view_hover = (TopView) findViewById(R.id.custom_top_view);view_hover.setTopView(R.id.top);}class MyAdapter extends BaseAdapter{@Overridepublic int getCount() {return 100;}@Overridepublic Object getItem(int position) {return null;}@Overridepublic long getItemId(int position) {return 0;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {TextView tView = new TextView(getApplicationContext());tView.setText("微博内容"); tView.setTextSize(24); tView.setTextColor(Color.parseColor("#000000"));tView.setGravity(Gravity.CENTER);return tView;}}}
TopView.java 布局文件的根布局
package com.zhimore.myscrollview.view;import android.content.Context;import android.util.AttributeSet;import android.view.View;import android.view.ViewGroup;import android.widget.FrameLayout;public class TopView extends FrameLayout {private ViewGroup mContentView;private ViewGroup mTopView;private int mTopViewTop;private View mTopContent;public TopView(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);init();}public TopView(Context context, AttributeSet attrs) {this(context, attrs,0);}public TopView(Context context) {this(context,null);}private void init() { post(new Runnable() { @Override public void run() {//获取它的根目录 view mContentView = (ViewGroup) getChildAt(0);//就是LinearLayout removeAllViews();//这是移除所有的view对象 CustomScrollView scrollView = new CustomScrollView(getContext(), TopView.this);//创建ScrollView scrollView.addView(mContentView);//把移除的view 添加到scrollview中 addView(scrollView);//把scrollview添加到自定义的topview中因为需要滑动 } });}public void setTopView(final int id) {post(new Runnable() {@Overridepublic void run() {mTopView = (ViewGroup) mContentView.findViewById(id);//悬挂的搜索布局 就是一个FrameLayoutint height = mTopView.getChildAt(0).getMeasuredHeight();//LienarLayout 高度ViewGroup.LayoutParams params = mTopView.getLayoutParams();params.height = height;mTopView.setLayoutParams(params);//设置搜索的高度mTopViewTop = mTopView.getTop();//离上面的距离mTopContent = mTopView.getChildAt(0);//mTopContent 其实就是LinearLayout}}); }public void onScroll(final int scrollY) { post(new Runnable() { @Override public void run() { if (mTopView == null) return; if (scrollY >= mTopViewTop&& mTopContent.getParent() == mTopView) { mTopView.removeView(mTopContent); addView(mTopContent); } else if (scrollY < mTopViewTop&& mTopContent.getParent() == TopView.this) { removeView(mTopContent);//从布局中移除这个mTopContent mTopView.addView(mTopContent);//把 这个mTopContent添加到搜索布局中 } } });}}
CustomScrollView.java
package com.zhimore.myscrollview.view;import android.content.Context;import android.util.AttributeSet;import android.util.Log;import android.widget.ScrollView;public class CustomScrollView extends ScrollView {private static final String TAG = CustomScrollView.class.getSimpleName();private TopView mTopView;public CustomScrollView(Context context, TopView topView) {super(context);this.mTopView = topView;setVerticalScrollBarEnabled(false);//禁止竖直滑动条出现}public CustomScrollView(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);}public CustomScrollView(Context context, AttributeSet attrs) {super(context, attrs);}public CustomScrollView(Context context) {super(context);} @Override protected void onScrollChanged(int l, int t, int oldl, int oldt) { super.onScrollChanged(l, t, oldl, oldt); Log.e(TAG, "t---------->"+t); mTopView.onScroll(t); }}
ScrollViewListView.java
package com.zhimore.myscrollview.view;import android.content.Context;import android.util.AttributeSet;import android.widget.ListView;/** * 解决ListView与SrollView共存自定义ListView */public class ScrollViewListView extends ListView {public ScrollViewListView(Context context) {super(context);}public ScrollViewListView(Context context, AttributeSet attrs) {super(context, attrs);}public ScrollViewListView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 1, MeasureSpec.AT_MOST);super.onMeasure(widthMeasureSpec, expandSpec);}}
布局文件:
<com.zhimore.myscrollview.view.TopView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/custom_top_view" android:layout_width="match_parent" android:layout_height="match_parent" > <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ImageView android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/meinv" android:contentDescription="@string/app_name" /> <FrameLayout android:id="@+id/top" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#66ffffff" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:padding="5dp" > <EditText android:id="@+id/et" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_weight="1" android:gravity="center" android:hint="请输入你想搜的内容" android:textSize="14sp" /> <Button android:id="@+id/btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/body_bg" android:layout_gravity="center_vertical" android:text="一键搜索" android:padding="11dp" android:layout_marginLeft="10dp" /> </LinearLayout> </FrameLayout><com.zhimore.myscrollview.view.ScrollViewListView android:id="@+id/listview" android:layout_width="fill_parent" android:layout_height="fill_parent" android:scrollbars="none" android:dividerHeight="1dp" android:divider="#e5e5e5" android:background="#ffffff" ></com.zhimore.myscrollview.view.ScrollViewListView> </LinearLayout></com.zhimore.myscrollview.view.TopView>
0 0
- android 仿新浪微博转发 评论悬浮框的功能
- Android新浪微博获取评论信息、发表评论、转发微博等.
- 用QTP测试新浪微博的评论功能
- (droid分享)新浪微博开发系列【十三】之微博的评论转发
- iOS-仿赤兔、新浪微博动态列表(带评论、点赞、转发和分享,自动计算行高功能)
- 仿新浪微博的ListView下拉更新功能
- 仿新浪微博的ListView下拉更新功能
- 仿新浪微博的ListView下拉更新功能
- 仿新浪微博的ListView下拉更新功能
- 仿新浪微博的ListView下拉更新功能
- 仿新浪微博的ListView下拉更新功能
- 仿新浪微博的ListView下拉更新功能
- 仿新浪微博的ListView下拉更新功能
- 仿新浪微博的ListView下拉更新功能
- 仿新浪微博的ListView下拉更新功能
- 新浪微博新增评论带图功能
- 仿照新浪微博评论的实现
- Android仿新浪微博欢迎界面的实现
- java中8种基本类型及运行转换
- MyEclipse使用总结——MyEclipse10安装SVN插件
- 利用JS实现的根据经纬度计算地球上两点之间的距离
- android的服务分类-andrioid学习之旅(94)
- Python3.4简单爬虫实现之抓取糗事百科段子
- android 仿新浪微博转发 评论悬浮框的功能
- imx6ul evk板子 QSPI nor启动记录(1)initramfs文件系统制作
- Web.py 的搭建
- MAC 下使用 IStat Menus 来来监视自己的Mac 的状态
- 发送邮件网页样式乱了。
- utilities——比较与排序规则(C++)
- VS2010与SVN
- 未安装excel delphi listview导出到excel
- RejectedExecutionException