安卓开发_自定义控件_界面的简单侧滑
主界面
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);}}
效果图
安卓开发_自定义控件_界面的简单侧滑相关推荐
- java安卓开发 快速入门_安卓程序员如何快速入门后端开发常识
首先,对于安卓开发人员来说,学习一下后端开发知识是有必要的,一方面可以拓展自身的知识面,另一方面也可以推动自己走向全栈程序员发展路线,在云计算时代,全栈程序员的发展空间会更大一些. 相对来说,安卓程序 ...
- 安卓开发基础--打招呼(事件的简单处理)
安卓开发基础--打招呼 事件处理部分Activity提供了和用户交互的可视化界面.创建一个Activity一般是继承Activity(当然也可以继承ListActivity.ActionBarActi ...
- android自定义模态框,安卓开发自定义弹出框的简单方式(纯代码布局)
弹出框在安卓开发中是经常会用到的,如果单纯的只是用安卓自带的对话框模式肯定是十分单调的. 再来我看来安卓一定有一个功能让我们像Layout添加Layout一样把Layout添加到提示框里面. 所以忘了 ...
- 安卓开发大作业_罗湖小程序开发制作价格低
罗湖小程序开发制作价格低 深圳市驰骋网络技术有限公司 驰骋网络提供外观结构设计+软硬件+APP+云服务 一站式开发服务 小程序开始走入了人们的视线,由于其独特的便捷性,给我们的生活提供了非常大的帮助, ...
- 五邑大学安卓开发程序设计报告_五邑大学模拟电路课程设计报告模板.docx
五邑大学模拟电路课程设计报告模板 模拟电路课程设计 PAGE10 / NUMPAGES10 模拟电路课程设计报告 课程题目:二阶低通滤波器和50HZ陷波滤波器 院系名称: 专业名称: 班级: 学号: ...
- java安卓开发模板软件_用Java模板创建你的Hello, Harmony!
2020年度华为开发者大会"HDC Together"于9月10日至9月12日在东莞松山湖成功举办.作为一名开发者,我有幸参加这一年一度的盛会,并且亲身体验了 Harmony OS ...
- 五邑大学安卓开发程序设计报告_五邑大学c程序设计答案
五邑大学c程序设计答案 更多相关问题 我国某条外流河的水文特征为:河流水量不大,中.下游河道经常断流,每年7月至9月为汛期.此河最可能是()A.海 我国最大的淡水湖是______湖,最大的咸水湖是__ ...
- 构建安卓开发实例(一)——线程——简单文字抽奖实现
记录一下如何将PC上的JAVA实例在安卓上进行实现 目录 一.准备环节 二.项目实践--文字抽奖程序实践 一.准备环节 第一步安装andriod Studio.这个大家在Android 开发者 | ...
- 安卓开发Java版——UI界面的设计
UI界面设计 常见控件使用方法 TextView android:background 背景颜色 android:layout_width和android:layout_height指定了控件的宽度和 ...
最新文章
- python函数参数理解
- go 向buff写入一个字节_我在 Go 中犯的 5 个错误
- Python中if __name__ == '__main__':作用
- linux之shell
- 洛谷 P3177 [HAOI2015]树上染色
- 为什么 MySQL 回滚事务也会导致 ibd 文件增大?
- 大数据面试-04-大数据工程师面试题
- linux视频教程百度网盘分享
- 编写内核驱动加载工具
- html中语音聊天怎么实现,微信小程序语音聊天功能怎么实现?
- Amaze UI 图标查询
- 不要成为职场中的三种人
- python语言是什么语言
- macOS长按键盘重复输入
- 在计算机领域cda,什么是CDA
- 伪静态 真伪静态的区别
- 小柴胡灵活加减治杂病
- 电脑启动时出现0xc000014c错误怎么办?
- 时针分针一天到底重合多少次?
- python菜鸟教程官网pandas,python菜鸟教程官网numpy
热门文章
- 推荐!小议如何跳出魔改网络结构的火坑(完整版)
- 百度EasyDL深度学习实战营,免费教你转型AI工程师!
- LFFD 再升级!新增行人和人头检测模型,还有了优化的C++实现
- redis java连接出错_redis连接错误与spring boot
- 简单聊聊Python协程
- C语言编程笔记丨一种很酷的 C 语言技巧
- Hinton发布最新论文!表达神经网络中部分-整体层次结构
- ECCV 2020最佳论文讲了什么?作者为ImageNet一作、李飞飞高徒
- include引入php报错,如何解决引入php文件报错的问题
- Arcgis用字段计算器计算只出一部分值另外一部分为null