安卓开发_自定义控件_界面的简单侧滑
主界面
package com.itheima.news; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.view.Window; public class NewsHomeActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //去掉头信息 requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_news_home); } }
<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" > <com.itheima.news.MenuListGrouView android:layout_width="match_parent" android:layout_height="match_parent" > <include layout="@layout/item_menu_list" /> <include layout="@layout/main_showpage" /> </com.itheima.news.MenuListGrouView> </RelativeLayout>
显示布局文件1
<?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="200dp" android:layout_height="match_parent" > <LinearLayout android:layout_width="200dp" android:layout_height="match_parent" android:background="@drawable/menu_bg" android:orientation="vertical" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:drawableLeft="@drawable/tab_dingyue" android:gravity="center" android:text="text1" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:drawableLeft="@drawable/tab_juhe" android:gravity="center" android:text="text1" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:drawableLeft="@drawable/tab_local" android:gravity="center" android:text="text1" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:drawableLeft="@drawable/tab_news" android:gravity="center" android:text="text1" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="5dp" android:drawableLeft="@drawable/tab_ties" android:gravity="center" android:text="text1" /> </LinearLayout> </ScrollView>
显示布局文件2
<?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:orientation="vertical" > <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/top_bar_bg" android:gravity="center" android:padding="10dp" android:text="我的小新闻 " android:textSize="20sp" /> <TextView android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:text="点击浏览内容 " /> </LinearLayout>
自定义控件 的页面
public class MenuListGrouView extends ViewGroup { private int downX; private int interDownX; private int interDownY; public MenuListGrouView(Context context) { this(context,null); } public MenuListGrouView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public MenuListGrouView(Context context, AttributeSet attrs) { this(context, attrs,-1); } //对子控件进行测量 @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); //获取子控件 View liftMenuView = getChildAt(0); View rightMainView = getChildAt(1); //对子控件进行测量 rightMainView.measure(widthMeasureSpec, heightMeasureSpec); liftMenuView.measure(liftMenuView.getLayoutParams().width, heightMeasureSpec); } //进行排版设置 @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { //找到相关控件 View liftMenuView = getChildAt(0); View rightMainView = getChildAt(1); //对控件进行排版 rightMainView.layout(l, t, r, b); liftMenuView.layout(-liftMenuView.getMeasuredWidth(), 0,0, b); } @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: //获取按下时的坐标 downX = (int) event.getX(); break; case MotionEvent.ACTION_MOVE: int moveX = (int) event.getX(); //计算偏移量 int shiftingX =downX -moveX ; //判断边界 int scrollX = getScrollX()+shiftingX; if (scrollX>0) { scrollTo(0, 0);//移动到指定的位置 } else if (scrollX<-getChildAt(0).getWidth()) { scrollTo(-getChildAt(0).getWidth(), 0); } else { //在上一次的移动的基础上进行移动 scrollBy(shiftingX,0); } downX = moveX ; break; case MotionEvent.ACTION_UP: //进行判断 int scrollUpX = (int) getScrollX(); if (scrollUpX>-getChildAt(0).getWidth()/2) { //如果向右滑动的距离小于右面控的一半的时候,那么就不显示右面的控件 scrollTo(0, 0); } else { //如果向右滑动的距离大于右面控件的一半的时候,那么就显示右面的控件 scrollTo(-getChildAt(0).getWidth(), 0); } break; default: break; } return true; } //消息传递机制来进行点击事件的滑动控制 @Override public boolean onInterceptTouchEvent(MotionEvent ev) { switch (ev.getAction()) { case MotionEvent.ACTION_DOWN: interDownX = (int) ev.getX(); interDownY = (int) ev.getY(); break; case MotionEvent.ACTION_MOVE: int interMoveX = (int) ev.getX(); int interMoveY = (int) ev.getY(); //计算偏移量 int interShiftingX = Math.abs(interMoveX - interDownX); int interShiftingY = Math.abs( interMoveY - interDownY); if (interShiftingX>interShiftingY) { //说明是侧滑 return true; } case MotionEvent.ACTION_UP: break; default: break; } return super.onInterceptTouchEvent(ev); } }
效果图

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
IOS多线程任务(综述篇)
微信公众平台 1 进程的五态模型 2 线程 线程是进程的基本执行单元 进程中的所有的任务全部是在线程中完成 3 多线程任务执行方式 串行 一个任务一个任务执行 并行 多个任务同时执行 4 IOS创建多线程的方式 5 pThread - (void)pThreadClickFunction{ //创建线程 pthread_t thread; //创建参数 NSString *str = @"helloWorld"; //参数1 线程编号的地址 //参数2 线程的属性 // 参数3 线程要执行的函数(函数指针)(第三个参数可以,demo,*demo, 一般用&demo) // 参数4 线程要执行的函数的参数 int result = pthread_create(&thread, NULL, &demo, (__bridge void *)(str)); // __bridge oc类型到c语言类型的一个转换 // void *p = (__bridge void *)(str); NSLog(@"over %d",result); } /// 线程要执行的函数 传...
- 下一篇
MapReduce优化倒序排序
第一次完成正常的统计总流量数据,第二步将结果进行排序 context.write(总流量,手机号) SorFlowBean实现WritableComparable接口重写compareTo方法@Override publicintcompareTo(FlowBeano){ //倒序排列,从大到小 returnthis.sumFlow>o.getSumFlow()?-1:1; } SortFlowBean类 packagecom.zyd.sortflowbean; importjava.io.DataInput; importjava.io.DataOutput; importjava.io.IOException; importorg.apache.hadoop.io.WritableComparable; publicclassSortFlowBeanimplementsWritableComparable{ privatelongupFlow; privatelongdownFlow; privatelongsumFlow; //反序列化需要反射调用空参构造函数 publ...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Windows10,CentOS7,CentOS8安装Nodejs环境
- 设置Eclipse缩进为4个空格,增强代码规范
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8编译安装MySQL8.0.19
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- CentOS8安装Docker,最新的服务器搭配容器使用