Android 侧滑重写HorizontalScrollView
来源:互联网 发布:朗文字典 for mac 编辑:程序博客网 时间:2024/05/16 05:20
一个简单的侧滑,主要是重写了HorizontalScrollView,非常简单,我就不一一述说了,直接上代码,有不懂的可以留言,不过我得注释写的很清楚,大家应该都能看得懂,
下面就直接上代码,
重写HorizontalScrollView
import android.content.Context;import android.util.AttributeSet;import android.util.DisplayMetrics;import android.view.MotionEvent;import android.view.ViewGroup;import android.view.WindowManager;import android.widget.HorizontalScrollView;import android.widget.LinearLayout;public class LeftMenu extends HorizontalScrollView {Context context;int width;// 屏幕的宽度int left_width;// menu宽度int scrolWidth;//滚动的宽度boolean isOpen;//判断侧滑菜单是否显示public LeftMenu(Context context) {super(context);this.context = context;}public LeftMenu(Context context, AttributeSet attrs) {super(context, attrs);this.context = context;}public LeftMenu(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);this.context = context;}//设置空间的大小@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {//获取屏幕的宽度WindowManager wm = (WindowManager) context.getSystemService(context.WINDOW_SERVICE);DisplayMetrics outMetrics = new DisplayMetrics();wm.getDefaultDisplay().getMetrics(outMetrics);width = outMetrics.widthPixels;left_width = (int) (width * 0.8);scrolWidth = (int)(left_width/2);LinearLayout wrapper = (LinearLayout) getChildAt(0);ViewGroup leftmenu = (ViewGroup) wrapper.getChildAt(0);ViewGroup content = (ViewGroup) wrapper.getChildAt(1);leftmenu.getLayoutParams().width = left_width;//设置leftmenu的宽度content.getLayoutParams().width = width;//设置正文的宽度super.onMeasure(widthMeasureSpec, heightMeasureSpec);}//设置控件的显示@Overrideprotected void onLayout(boolean changed, int l, int t, int r, int b) {super.onLayout(changed, l, t, r, b);if(changed){this.scrollTo(left_width, 0);//隐藏leftmenu}}@Overridepublic boolean onTouchEvent(MotionEvent ev) {int action = ev.getAction();switch (action) {case MotionEvent.ACTION_UP:int scrollX = getScrollX();//如果显示区域大于菜单宽度一半则完全显示,否则隐藏if(scrollX >= scrolWidth){this.smoothScrollTo(left_width, 0);isOpen = false;}else{this.smoothScrollTo(0, 0);isOpen = true;}break;}return super.onTouchEvent(ev);}//判断leftmenu的显示隐藏,主要用于外部按钮的设置menu的显示隐藏public void openMenu() {if(isOpen){this.smoothScrollTo(left_width, 0);isOpen = false;}else{this.smoothScrollTo(0, 0);isOpen = true;}}}
<LinearLayout 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" > <com.example.ceshi.LeftMenu android:id="@+id/main_hsv" android:layout_width="match_parent" android:layout_height="match_parent" android:scrollbars="none" > <LinearLayout android:layout_width="wrap_content" android:layout_height="match_parent" android:orientation="horizontal" > <LinearLayout android:id="@+id/main_menu" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:background="#ff0000" ></LinearLayout> <LinearLayout android:id="@+id/main_centext" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:background="#000000" > <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="打开" android:id="@+id/main_btn" /> </LinearLayout> </LinearLayout> </com.example.ceshi.LeftMenu></LinearLayout>
Activity的实现
import android.os.Bundle;import android.app.Activity;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.LinearLayout;public class MainActivity extends Activity {LeftMenu main_hsv;//滚动条LinearLayout main_menu;//左侧菜单LinearLayout main_centext;//正文Button main_btn;//显示和隐藏menu的按钮@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initview();//按钮点击事件,设置menu的显示隐藏main_btn.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {main_hsv.openMenu();}});}//实例化控件private void initview() {main_hsv = (LeftMenu) this.findViewById(R.id.main_hsv);main_menu = (LinearLayout) this.findViewById(R.id.main_menu);main_centext = (LinearLayout) this.findViewById(R.id.main_centext);main_btn = (Button) this.findViewById(R.id.main_btn);}}
资源下载
0 0
- Android 侧滑重写HorizontalScrollView
- SlidingMenu重写HorizontalScrollView实现菜单侧滑的效果
- Android重写HorizontalScrollView模仿ViewPager效果
- android:自定义HorizontalScrollView实现qq侧滑菜单 标签: HorizontalScrollView自定义viewqq侧滑菜单 2016
- Android 侧滑缩放菜单(HorizontalScrollView简单实现)
- Android 侧滑菜单(继承自HorizontalScrollView)
- Android学习笔记 :自定义HorizontalScrollView实现侧滑菜单
- android:自定义HorizontalScrollView实现qq侧滑菜单
- Android开发——HorizontalScrollView实现侧滑效果
- android HorizontalScrollView
- Android HorizontalScrollView
- Android HorizontalScrollView
- Android HorizontalScrollView
- HorizontalScrollView实现侧滑菜单
- HorizontalScrollView实现侧滑效果
- 自定义HorizontalScrollView之侧滑
- Android重写HorizontalScrollView只接收水平方向上滑动的事件
- 使用HorizontalScrollView实现侧滑菜单
- hdu 3625 Examining the Rooms
- AOP源码分析-CglibAopProxy DynamicAdvisedInterceptor
- string中c_str()、data()、copy(p,n)函数的用法
- popwindow之弹出动画
- AndroidPN服务器与客户端的全面解析
- Android 侧滑重写HorizontalScrollView
- mysql 内网访问
- cocos2d-x 精华博客链接
- MOTO G一键解锁Root权限获取教程
- Android NFC 学习 2
- 李红霞作业第三章20题
- 编辑-保存-取消
- [EventProxy(一)]NodeJs之使用EventProxy解决多层异步调用的嵌套
- 出国程序---网上申报流程