主界面

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 {@Overrideprotected 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.MenuListGrouViewandroid: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" ><LinearLayoutandroid:layout_width="200dp"android:layout_height="match_parent"android:background="@drawable/menu_bg"android:orientation="vertical" ><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="10dp"android:drawableLeft="@drawable/tab_dingyue"android:gravity="center"android:text="text1" /><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="10dp"android:drawableLeft="@drawable/tab_juhe"android:gravity="center"android:text="text1" /><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="10dp"android:drawableLeft="@drawable/tab_local"android:gravity="center"android:text="text1" /><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="10dp"android:drawableLeft="@drawable/tab_news"android:gravity="center"android:text="text1" /><TextViewandroid: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" ><TextViewandroid: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" /><TextViewandroid: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);}//对子控件进行测量   @Overrideprotected 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);}//进行排版设置 @Overrideprotected 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);}@Overridepublic 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;}//消息传递机制来进行点击事件的滑动控制 @Overridepublic 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);}}

效果图

安卓开发_自定义控件_界面的简单侧滑相关推荐

  1. java安卓开发 快速入门_安卓程序员如何快速入门后端开发常识

    首先,对于安卓开发人员来说,学习一下后端开发知识是有必要的,一方面可以拓展自身的知识面,另一方面也可以推动自己走向全栈程序员发展路线,在云计算时代,全栈程序员的发展空间会更大一些. 相对来说,安卓程序 ...

  2. 安卓开发基础--打招呼(事件的简单处理)

    安卓开发基础--打招呼 事件处理部分Activity提供了和用户交互的可视化界面.创建一个Activity一般是继承Activity(当然也可以继承ListActivity.ActionBarActi ...

  3. android自定义模态框,安卓开发自定义弹出框的简单方式(纯代码布局)

    弹出框在安卓开发中是经常会用到的,如果单纯的只是用安卓自带的对话框模式肯定是十分单调的. 再来我看来安卓一定有一个功能让我们像Layout添加Layout一样把Layout添加到提示框里面. 所以忘了 ...

  4. 安卓开发大作业_罗湖小程序开发制作价格低

    罗湖小程序开发制作价格低 深圳市驰骋网络技术有限公司 驰骋网络提供外观结构设计+软硬件+APP+云服务 一站式开发服务 小程序开始走入了人们的视线,由于其独特的便捷性,给我们的生活提供了非常大的帮助, ...

  5. 五邑大学安卓开发程序设计报告_五邑大学模拟电路课程设计报告模板.docx

    五邑大学模拟电路课程设计报告模板 模拟电路课程设计 PAGE10 / NUMPAGES10 模拟电路课程设计报告 课程题目:二阶低通滤波器和50HZ陷波滤波器 院系名称: 专业名称: 班级: 学号: ...

  6. java安卓开发模板软件_用Java模板创建你的Hello, Harmony!

    2020年度华为开发者大会"HDC Together"于9月10日至9月12日在东莞松山湖成功举办.作为一名开发者,我有幸参加这一年一度的盛会,并且亲身体验了 Harmony OS ...

  7. 五邑大学安卓开发程序设计报告_五邑大学c程序设计答案

    五邑大学c程序设计答案 更多相关问题 我国某条外流河的水文特征为:河流水量不大,中.下游河道经常断流,每年7月至9月为汛期.此河最可能是()A.海 我国最大的淡水湖是______湖,最大的咸水湖是__ ...

  8. 构建安卓开发实例(一)——线程——简单文字抽奖实现

    记录一下如何将PC上的JAVA实例在安卓上进行实现 目录 一.准备环节 二.项目实践--文字抽奖程序实践 一.准备环节 第一步安装andriod Studio.这个大家在Android 开发者  |  ...

  9. 安卓开发Java版——UI界面的设计

    UI界面设计 常见控件使用方法 TextView android:background 背景颜色 android:layout_width和android:layout_height指定了控件的宽度和 ...

最新文章

  1. python函数参数理解
  2. go 向buff写入一个字节_我在 Go 中犯的 5 个错误
  3. Python中if __name__ == '__main__':作用
  4. linux之shell
  5. 洛谷 P3177 [HAOI2015]树上染色
  6. 为什么 MySQL 回滚事务也会导致 ibd 文件增大?
  7. 大数据面试-04-大数据工程师面试题
  8. linux视频教程百度网盘分享
  9. 编写内核驱动加载工具
  10. html中语音聊天怎么实现,微信小程序语音聊天功能怎么实现?
  11. Amaze UI 图标查询
  12. 不要成为职场中的三种人
  13. python语言是什么语言
  14. macOS长按键盘重复输入
  15. 在计算机领域cda,什么是CDA
  16. 伪静态 真伪静态的区别
  17. 小柴胡灵活加减治杂病
  18. 电脑启动时出现0xc000014c错误怎么办?
  19. 时针分针一天到底重合多少次?
  20. python菜鸟教程官网pandas,python菜鸟教程官网numpy

热门文章

  1. 推荐!小议如何跳出魔改网络结构的火坑(完整版)
  2. 百度EasyDL深度学习实战营,免费教你转型AI工程师!
  3. LFFD 再升级!新增行人和人头检测模型,还有了优化的C++实现
  4. redis java连接出错_redis连接错误与spring boot
  5. 简单聊聊Python协程
  6. C语言编程笔记丨一种很酷的 C 语言技巧
  7. Hinton发布最新论文!表达神经网络中部分-整体层次结构
  8. ECCV 2020最佳论文讲了什么?作者为ImageNet一作、李飞飞高徒
  9. include引入php报错,如何解决引入php文件报错的问题
  10. Arcgis用字段计算器计算只出一部分值另外一部分为null