手势拖动布局,出现新区域
来源:互联网 发布:js关闭微信内置浏览器 编辑:程序博客网 时间:2024/06/09 18:50
博客开通了有几个月了,一直没当回事儿; 前几天才发现它的重要性, 遂找出来记录下自己平时的点滴,哪怕是心情也好;
话不多说,如题所述,在我的布局已经定格的时候,突然有个怪诞的需求,对整个布局进行拖动,出现新布局? 首先想到的是通过手势监听-布局的整体移动-显示事先隐藏的布局,然后开始实现 。
先上张效果图看看样子再说··············
1. 定格的UI.
注: 由于项目还在进行中, 其中的内容不便公开,毕竟签过卖身契 见谅哈 看官们要的是效果哈 [刚才上传照片的时候 吓着了 这么大 本图是经过本人用PS用红色覆盖 暂且无视哈]
好 那么接下来 操作过后的效果示意图出现了-
2.通过手势滑动后, 显示出事先预设的场景 上传个图这么费劲啊、 又被吓了一次、 图真大
好啦 效果一般 就是顶部通过手势下拉 出现了两个按钮,然后通过上推还原,或者点击跳转到具体设置界面都可以; 还没来得及做;
其实看似简单的一个小过程, 耗费了自己不少的经历去摸索-实现,咱要的是思路,不是复制过来就能实现的那种代码哈 再说咱也不能把客户的money这么快的曝光, 请见谅哈
具体实现开始·········
布局文件----------------------
<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" android:orientation="vertical" android:background="#383838"> <LinearLayout android:id="@+id/help_ll" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:visibility="gone"> <Button android:id="@+id/help_btn" android:layout_marginLeft="30dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="帮助"/> <Button android:id="@+id/cancel" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="注销"/> </LinearLayout> <LinearLayout android:id="@+id/all_ll" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:id="@+id/main_menu_title_ll" android:layout_width="match_parent" android:orientation="horizontal" android:paddingLeft="9dp" android:paddingRight="9dp" android:gravity="center_vertical" android:layout_height="wrap_content"> <Button android:id="@+id/menu_title_scape_button" style="@style/main_menu_title_ll_button" android:background="@drawable/title_btn_with_down_arrow" android:text="销售一区"/> <Button android:id="@+id/menu_title_time_button" style="@style/main_menu_title_ll_button" android:background="@drawable/title_btn_with_down_arrow" android:text="02/17-02/26" />
·····················
<LinearLayout android:id="@+id/main_menu_item" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginTop="0dp" android:layout_marginLeft="10dp" android:layout_marginRight="10dp" android:paddingLeft="9dp" android:paddingRight="9dp" android:longClickable="true" android:orientation="vertical"> <LinearLayout android:id="@+id/menu_item_31_ll" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:gravity="center_vertical" android:layout_weight="1"> <com.broadtext.lspkpi.view.MenuItemLeftButton android:id="@+id/view1" style="@style/main_menu_items_view_style"/> <com.broadtext.lspkpi.view.MenuItemLeftButton android:id="@+id/view2" style="@style/main_menu_items_view_style"/> <com.broadtext.lspkpi.view.MenuItemRightButton android:id="@+id/view3" style="@style/main_menu_items_view_style"/>
//中间略去一大堆 堆砌代码 重点看上面的··················
</LinearLayout>
上面是一些残缺不全的布局文件,但是重要的部分全部列出来了
1. 我用了个比较笨的办法, 先将要显示的布局隐藏掉, 操作之后再将其visible;
2.一定要将触摸的区域设置成············· android:longClickable="true" 否则无法进行监听, 会与视图的点击事件冲突(我的触摸区域就是下面的9个item,同时也有点击事件+上下推事件)
3.因为特殊需求, Android原生的控件已经不能满足, 只能自己重写控件【跟此处的实现没关系】, 感觉很爽的哈、 前提是你得熟悉下思路, 本文重点不在重写控件(本项目中几乎所有的显示控件都是自己重写的,将近10个吧),以后会着重写一篇博文,虽说中级开发者可以游刃有余的重写需要的控件,但是自我感觉--自己依然很菜呀!!!
又说了些废话, 赶紧上主题哈、 下面就是Java代码部分核心实现············
public class MainLSPKPIActivity extends Activity implements OnClickListener, OnGestureListener, OnTouchListener {
private GestureDetector gestureDetector;//手势监听-为了[上推]事件而准备。
@Override protected void onCreate(Bundle savedInstanceState) {
gestureDetector = new GestureDetector(this, this);//手势监听初始化
}
//设置点击事件-触摸事件
private void setListeners() { menuTitle1Btn.setOnClickListener(this); menuTitle2Btn.setOnClickListener(this); menuTitle3Btn.setOnClickListener(this); menuTitle4Btn.setOnClickListener(this); menuTitleLL.setOnTouchListener(this); menuTitle1Btn.setOnTouchListener(this); menuTitle2Btn.setOnTouchListener(this); menuTitle3Btn.setOnTouchListener(this); menuTitle4Btn.setOnTouchListener(this); menuItem.setOnTouchListener(this);//设置触摸监听事件,捕捉上推动作。 view1.setOnTouchListener(this); view2.setOnTouchListener(this); view3.setOnTouchListener(this); view4.setOnTouchListener(this); view5.setOnTouchListener(this); view6.setOnTouchListener(this); view7.setOnTouchListener(this); view8.setOnTouchListener(this); view9.setOnTouchListener(this); toLineChartLayout.setOnTouchListener(this); toLineChartView.setOnTouchListener(this); view1.setOnClickListener(this); view2.setOnClickListener(this); view3.setOnClickListener(this); view4.setOnClickListener(this); view5.setOnClickListener(this); view6.setOnClickListener(this); view7.setOnClickListener(this); view8.setOnClickListener(this); view9.setOnClickListener(this); }
/** * 监听back键。 */ public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { Dialog alertDialog = new AlertDialog.Builder(this). setTitle("退出系统"). setMessage("您确定退出系统吗?"). setIcon(R.drawable.ic_launcher). setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { finish(); System.exit(0); } }). setNegativeButton("取消",null). create(); alertDialog.show(); return true; } return super.onKeyDown(keyCode, event); } /** * -----------------------------------手势监听---------------------------------------------- * 实现方法 onDown()、 onFling()、 onLongPress()、 onScroll()、onShowPress()、onSingleTapUp()、 */ @Override public boolean onDown(MotionEvent e) { return false; }
boolean helpLLIsShowed = false;//帮助界面是否已经显示。 @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { if(menuItem22isRefreshed) { if(e1.getY() - e2.getY() > 3) { resetTitleBtnBackground(); Toast.makeText(this, "---手势向上推---", Toast.LENGTH_SHORT).show(); menuLL21.setVisibility(View.GONE); forbidViewsClick(true);//允许9view。折线图点击事件。 forbidLineChartClick(true); //上推--主界面刷新 initInData();//---查询SQL, 传入不同字段, 刷新界面数据 stepCount = 0;//将刷新步调调至0,重新刷新界面。 myHandler.post(viewsRunnable);//退出后继续动画。 showDownAnimation(toLineChartLayout, 150, 0);//当点击任何一个二级菜单按钮时,底部9个菜单上浮。 //上推--折线图刷新。 handleDynamicLineChartRefresh(lineChartItemFlag); menuItem22isRefreshed = false;//当界面向上推之后,禁止再次上推刷新--当点击titleBtn时可解禁。 return true; } } if(!helpLLIsShowed) { if(e2.getY() - e1.getY() > 20) {//向下拉---显示帮助按钮。 Toast.makeText(getApplicationContext(), "下拉动作", Toast.LENGTH_SHORT).show(); helpLL.setVisibility(View.VISIBLE); showDownAnimation(allLL, -100, 0); helpLLIsShowed = true; return true; } } if(helpLLIsShowed) {//上推。 if(e1.getY() - e2.getY() > 20) { helpLL.setVisibility(View.GONE); showDownAnimation(allLL, 100, 0); } helpLLIsShowed = false; } return true; }
@Override public void onLongPress(MotionEvent e) { }
@Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { return false; }
@Override public void onShowPress(MotionEvent e) { }
@Override public boolean onSingleTapUp(MotionEvent e) { return false; } //------------------------------------手势监听------------------------------------------------
/** * 触摸事件监听 * 此处是为了手势gesture监听做准备, 将触摸事件传递给gesture-- * gestureDetector.onTouchEvent(event) */ @Override public boolean onTouch(View v, MotionEvent event) { //将触摸事件传递给手势监听 return gestureDetector.onTouchEvent(event); }
又贴了一大堆代码呀! !!! 呵呵 没关系, 因为这个Java文件有1994行, 包括获取后台JSON 解析 SQLite存储+查询 UI呈现 所以有点膨胀哈 不过这已经分离了很多了、 还有待完善了吧、 继续下文
最关键的是将gestureDetector把触摸事件传递到gesture的监听中···gestureDetector.onTouchEvent(event);
粉红色的代码段就是控制按钮显示的关键代码,一定要return true 哈 这样这个fling事件才能继续下去(不知道说的严谨否);
还有 一定要学会用flag来控制代码执行流程, 这个东西如果运用巧妙 代码立马就生动起来了 记住哦 Boolean很强大
嗯 想了想 第一篇技术博客 还有什么要说的呢 毕竟时间有点紧张 项目本周要交差 晚上实在不想写太多代码了 写写博客得了 就是废话有点多
今天这个blog的主题 其实就是一个简单的手势监听处理, 没什么其他技术含量;就算是个开头吧 以后会多记录些有用的实现+代码 分享分享呵、
今后自己要写的博客内容可能涉及到 - - - - - - 先列个提纲 别到时候忘记了 都是自己实现过的东西 呵呵
百度地图定位 基站定位 地图纠偏 ntlm域验证 webview的使用 绘图-view/surfaceView 二维码扫描{已成功纠正横竖屏}
自定义控件 纯Java写布局-动态生成控件 级联菜单【联动概念】 slidemenu侧滑库研究 fragment使用 activity向fragment的迁移【有点难度】
视频传输 动画渐变 柱状图 折线图 扇形图【手写 非achartengine】
spring4Android框架解析 SQLite大数据存储 优化查询【索引+in函数+】 异步任务研究 - - -
其实通过项目 我逼着自己学会了PS处理基本的UI只因为我们组没有美工 比较有成就感, 本领都是逼出来的、 能力都是被压出来的
我尽量写的完整些,愚见多些,百分百原创才有记录的价值, 因为都是自己一年来涉及过的知识点吧, 哎 最近事情着实有点多, 工作、生活·· 各方面, 真烦, 没事,程序员嘛, 一到了自己的主战场, 主角依然是自己!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~ 唯有压力才能突破, 才能距破茧成蝶之日更进一步、~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- 手势拖动布局,出现新区域
- 拖动手势
- Android 通过手势类实现的可拖动布局实例
- cordova上下拖动页面出现黑色区域问题
- 手势 双击 拖动事件
- 拖动手势实现代码
- iOS 拖动手势
- iOS中手势之拖动手势UIPanGestureRecognizer
- iOS拖动手势的使用
- iOS拖动手势(pan)
- 手势识别--拖动,旋转,缩放
- iOS手势(拖动,缩放,旋转,点击,手势依赖,自定义手势)
- openlayers限制地图拖动区域
- openlayers限制地图拖动区域
- 网页拖动布局
- div拖动布局
- 悬浮按钮拖动布局
- 根据手势移动布局
- 进程间通信—信号(一)
- Windows SDK下ListBox控件的使用
- poj 题目1883 排列(STL----next_permutation)
- CSDN 博客起航
- sdf d
- 手势拖动布局,出现新区域
- Android开发:什么是IBinder
- android中布局说明
- HDU 4430Yukari's Birthday2012现场赛K题(幂打表 思维 枚举+二分)
- NY--95 -- 众数问题 [水]
- Non-negative Partial Sums
- 用系统时间+序列+触发器 实现自动加入id并且实现唯一
- 主板维修技巧
- log4j配置祥解