Android 滑动关闭Activity 示例
来源:互联网 发布:.eps用什么软件打开 编辑:程序博客网 时间:2024/06/07 06:26
先看效果图 :
要用到的 知识点 :1. 滑动处理
2.滑动冲突处理
3.设置Activity的主题
4. 位移动画
5. 滑动的监听
明显可以看出,它是一个ViewGrope , 而且肯定是在能看到的视图最上层.(不然滑动过去了,背景不是透明的)。
那么让它继承 RelativeLayout 并重写其构造方法。
public class MySlipFinishView extends RelativeLayout { public MySlipFinishView(Context context) { super(context); } public MySlipFinishView(Context context, AttributeSet attrs) { super(context, attrs); } public MySlipFinishView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); }}然后重写 onTouchEvent 方法:
int startX = 0; int startY = 0; @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: startX = (int) event.getRawX(); startY = (int) event.getRawY(); break; case MotionEvent.ACTION_MOVE: offX = (int) (event.getRawX() - startX); int offy = (int) (event.getRawX() - startY); if (Math.abs(offX) > ViewConfiguration.get(mContext).getScaledTouchSlop()) { slipView(offX); } break; case MotionEvent.ACTION_UP: if (Math.abs(offX) > (width / 2 - 5)) {// Toast.makeText(mContext, "此时应该关闭当前Activity", Toast.LENGTH_SHORT).show(); if (mylayoutlisten != null) { mylayoutlisten.closeActivitySlipListener(); } } else { startObjectAnimation(); } break; default: break; } return super.onTouchEvent(event); }在此方法中 确定滑动距离 , 然后根据距离判断手抬起时,是否关闭当前Activity。
说明 : 1.ViewConfiguration.get(mContext).getScaledTouchSlop() 获取滑动最小距离。这样体验会好一点。
2. width 是屏幕的宽度
@Override protected void onLayout(boolean changed, int l, int t, int r, int b) { super.onLayout(changed, l, t, r, b); width = getWidth(); }
下面来实现 视图根据手指滑动而滑动。我们常用的滑动有那么几种(layout ,偏移,layoutParams,scrollToscrollBy , 动画 等),这里使用属性动画比较合适,因为此控件是整体滑动,而不是内容滑动!
属性动画代码如下:( 要导入 com.nineoldandroids:library:2.4.0 jar)
private void slipViewGrope(int offX) { if (offX < 0) { offX = 0; } ViewHelper.setTranslationX(this, offX); }
/** * 恢复到初始位置 */ private void startObjectAnimation() { ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(this, "translationX", 0); objectAnimator.setDuration(300); objectAnimator.start(); }
设置监听 : 要想使用还必须设置监听,来监听什么时候关闭Activity。
public interface SlipActivityListener { void closeActivitySlipListener();}
在控件中使用:
private SlipActivityListener myLayoutListener;
public void setListener(SlipActivityListener listener) { this.myLayoutListener = listener; }好了! 下面只要给Activity设置透明主题就行了 (透明不透明 随个人 ,关键滑动了 Activity ,想看到什么)
使用的Activity 要 <item name="windowBackground">@color/transparent</item> <item name="colorBackgroundCacheHint">@null</item> <item name="windowIsTranslucent">true</item> 要设置
如 :
<activity android:name=".SecondActivity" android:theme="@android:style/Theme.Translucent.NoTitleBar"> </activity>
这样基本就可以了。但是还有个问题没有处理,滑动冲突。
添加如下代码就可以了。(判断是否拦截)
@Override public boolean onInterceptTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: startX = (int) event.getRawX(); startY = (int) event.getRawY(); break; case MotionEvent.ACTION_MOVE: offX = (int) (event.getRawX() - startX); offY = (int) (event.getRawY() - startY); if (offX < 0) { offX = 0; } if (Math.abs(offX) > (Math.abs(offY) + 10)) { return true; } else { return false; } } return super.onInterceptTouchEvent(event); }
到这里就结束了,有什么不对的,还请指出!
我在项目中使用的背景是:
<item name="android:windowBackground">@color/transparent_left</item> <item name="android:colorBackgroundCacheHint">@color/transparent</item> <item name="android:windowIsTranslucent">true</item>
<color name="transparent_left">#50000000</color> <color name="transparent">#00000000</color>
0 0
- Android 滑动关闭Activity 示例
- Android仿微信activity滑动关闭
- android 向右滑动关闭Activity
- Android之Activity滑动关闭(销毁)
- android手势滑动关闭当前activity
- Android activity 单手操作 滑动关闭
- [Android]通过ViewDragHelper实现滑动关闭Activity
- 滑动关闭Activity
- 滑动关闭Activity
- activity向右滑动关闭退出
- Activity滑动关闭的效果
- Android Activity---关闭Activity
- Android Activity---关闭Activity
- Android滑动切换activity
- Android滑动删除activity
- 用SwipeBackLayout实现滑动关闭当前Activity
- Android启动关闭Activity
- android 关闭所有activity
- 关于Error.captureStackTrace
- CocoPod的安装使用
- 深入JVM类加载器
- 在foreach中使用key($array)
- Twitter的开源自动化测试工具diff
- Android 滑动关闭Activity 示例
- Anaconda包查找,conda自定义本地channel作为python package源进行离线安装,离线创建环境
- Cocos2d-x V3.10项目(cocos2d-x lua) 输出控制台2
- linux程序设计:可重入和线程安全
- CNN训练Cifar-10技巧整理
- iOS 设置TableView Separatorinset 分割线从边框顶端开始以及分割线的颜色
- 怎么添加一个tinymix可执行文件的te文件
- MySQL SQL语句优化
- 四书 - 中庸