android 入门-防微信拍摄视频 按钮事件处理
package com.cc.view; import com.cc.R;
import com.cc.R.layout;
import com.cc.R.menu; import android.opengl.Visibility;
import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.util.Log;
import android.view.GestureDetector;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.GestureDetector.SimpleOnGestureListener;
import android.view.Menu;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView; public class GestureDetectorAty extends Activity { private Button mButton;
private GestureDetector mGestureDetector; private LinearLayout mLayout;
private TextView mCancel; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.aty_gesture_detector);
mLayout = (LinearLayout) findViewById(R.id.displayrecord); mCancel = (TextView) findViewById(R.id.tv_cancelrecord); mGestureDetector = new GestureDetector(this, new MyOnGestureListener(
this)); mButton = (Button) findViewById(R.id.btn_textgesture);
mButton.setFocusableInTouchMode(true);
mButton.setOnTouchListener(new OnTouchListener() { @Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: {
break;
}
case MotionEvent.ACTION_MOVE: { final float p1x = event.getX();
break;
}
case MotionEvent.ACTION_UP: {
mLayout.setVisibility(View.GONE);
mCancel.setVisibility(View.GONE);
break;
}
default:
break;
}
mGestureDetector.onTouchEvent(event);
// 一定要返回true,不然获取不到完整的事件
return true;
} }); } public class MyOnGestureListener extends SimpleOnGestureListener {
private GestureDetectorAty mActivity; public MyOnGestureListener(Context context) {
this.mActivity = (GestureDetectorAty) context;
} @Override
public void onLongPress(MotionEvent e) {
// TODO Auto-generated method stub
super.onLongPress(e);
} @Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
float p2y = e2.getY();
float p1y = e1.getY();
if (p1y - p2y > ) {
if (e2.getX() - e1.getX() > - | e2.getX() - e1.getX() < ) { }
} // TODO Auto-generated method stub
return super.onFling(e1, e2, velocityX, velocityY);
} // 按住 且为达到onLongPress之前 调用 一旦调用就不会有onSingleTapUp
// 点击了触摸屏,但是没有移动和弹起的动作。onShowPress和onDown的区别在于
// onDown是,一旦触摸屏按下,就马上产生onDown事件,但是onShowPress是onDown事件产生后,
// 一段时间内,如果没有移动鼠标和弹起事件,就认为是onShowPress事件。
@Override
public void onShowPress(MotionEvent e) {
// TODO Auto-generated method stub
super.onShowPress(e); } // 按下的时候触发
@Override
public boolean onDown(MotionEvent e) {
// TODO Auto-generated method stub
mLayout.setVisibility(View.VISIBLE);
return super.onDown(e);
} // 离开屏幕的一刹那
// 轻击触摸屏后,弹起。如果这个过程中产生了onLongPress、onScroll和onFling事件,就不会
// 产生onSingleTapUp事件。
@Override
public boolean onSingleTapUp(MotionEvent e) {
// TODO Auto-generated method stub
isScroll = true;
mLayout.setVisibility(View.GONE); return super.onSingleTapUp(e);
} @Override
public boolean onSingleTapConfirmed(MotionEvent e) {
// TODO Auto-generated method stub
return super.onSingleTapConfirmed(e);
} private boolean isScroll = true; // 滚动事件,当在触摸屏上迅速的移动,会产生onScroll。由ACTION_MOVE产生
// e1:第1个ACTION_DOWN MotionEvent
// e2:最后一个ACTION_MOVE MotionEvent
// distanceX:距离上次产生onScroll事件后,X抽移动的距离
// distanceY:距离上次产生onScroll事件后,Y抽移动的距离
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2,
float distanceX, float distanceY) {
// TODO Auto-generated method stub
if (e1.getY() - e2.getY() > ) {
if (e2.getX() - e1.getX() > - | e2.getX() - e1.getX() < ) {
if (isScroll) {
isScroll = false;
mCancel.setVisibility(View.VISIBLE);
mLayout.setVisibility(View.GONE); }
}
} else if (e1.getY() - e2.getY() < ) {
if (e2.getX() - e1.getX() > - | e2.getX() - e1.getX() < ) {
isScroll = true;
if (isScroll) {
mCancel.setVisibility(View.GONE);
mLayout.setVisibility(View.VISIBLE);
}
}
}
return super.onScroll(e1, e2, distanceX, distanceY);
}
}
}
<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"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".GestureDetectorAty" > <Button
android:id="@+id/btn_textgesture"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_centerInParent="true"
android:text="@string/app_name" /> <LinearLayout
android:id="@+id/displayrecord"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/btn_textgesture"
android:layout_centerHorizontal="true"
android:layout_marginBottom="50dp"
android:orientation="horizontal"
android:visibility="gone" > <ImageView
android:id="@+id/arrow"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/icon" /> <TextView
android:id="@+id/tv_displayrecord"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="开始录制"
android:textColor="@color/green" />
</LinearLayout> <TextView
android:id="@+id/tv_cancelrecord"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/btn_textgesture"
android:layout_centerHorizontal="true"
android:layout_marginBottom="150dp"
android:background="@color/red"
android:visibility="gone"
android:text="取消录制"
android:textColor="@color/white" /> </RelativeLayout>

android 入门-防微信拍摄视频 按钮事件处理的更多相关文章
- Android 自定义View,仿微信视频播放按钮
闲着,尝试实现了新版微信视频播放按钮,使用的是自定义View,先来个简单的效果图...真的很简单哈. 由于暂时用不到,加上时间原因,加上实在是没意思,加上……,本控件就没有实现自定义属性,有兴趣的朋友 ...
- Android防微信首页左右滑动切换
大家看到微信首页切换效果有没有觉得很炫,滑动切换,点击底部bar瞬间切换,滑动切换渐变效果,线上效果图: 之前也在博客上看到别人的实现,再次基础上,我做了些优化.首先说下实现原理,大神略过,o(╯□╰ ...
- Android零基础入门第34节:Android中基于监听的事件处理
原文:Android零基础入门第34节:Android中基于监听的事件处理 上一期我们学习了Android中的事件处理,也详细学习了Android中基于监听的事件处理,同时学会了匿名内部类形式,那么本 ...
- 【详细】Android入门到放弃篇-YES OR NO-》各种UI组件,布局管理器,单元Activity
问:达叔,你放弃了吗? 答:不,放弃是不可能的,丢了Android,你会心疼吗?如果别人把你丢掉,你是痛苦呢?还是痛苦呢?~ 引导语 有人说,爱上一个人是痛苦的,有人说,喜欢一个人是幸福的. 人与人之 ...
- Android:仿微信开场切换界面
这实例很多人仿做,好实例还是不容错过!最重要是素材容易拿~ 效果: 默认3页面的切换,最后一个页面带按钮,点击进入另外一个页面 思路: 1.准备5个布局页面,1个为主函数布局页面,3个为切换的页面(其 ...
- Android入门1:使用VideoView和MediController播放视频
最近在搞Android,入门曲线还是挺陡峭的,主要还是自己对Java的理解不够深入.前后学习了几天,把最近学习到的一些知识点总结归纳一下,正所谓温故而知新. 目前想搞一个禁播视频站,主要内容都是一些大 ...
- 小猪的Android入门之路 Day 4 - part 1
小猪的Android入门之路 Day 4 - part 1 Android事件处理机制之--基于监听的事件处理机制 本节引言: 在開始本个章节前,我们先回想下,如今我们已经知道了android的一些相 ...
- Android入门第一课之Java基础
通知:由于本周六场地申请没通过,所以本周的培训临时取消. 今天给大家带来的是Android入门的第一课,由于教室申请的不确定性,因此,每次培训的内容都会在博客先提前释放出来.首先Android的APP ...
- 前端之Android入门(3):MVC模式(上)
很多Android的入门书籍,在前面介绍完布局后就会逐个介绍组件,然后开始编写组件使用的例子.每每到此时小伙伴们都可能会有些疑问:是否应该先啃完一本<Java编程思想>学点 Java 知识 ...
随机推荐
- DevStack安装时报“download of get-pip.py failed”
ref from : http://www.voidcn.com/blog/ldli8979/article/p-5005958.html 这个可能会有多种原因造成.网上搜了一下,有人说需要手动下载, ...
- Qt 信号槽如何传递参数(或带参数的信号槽)
信号槽如何传递参数(或带参数的信号槽) 利用Qt进行程序开发时,有时需要信号槽来完成参数传递.带参数的信号槽在使用时,有几点需要注意的地 ...
- 用Java计算某个日期100天后的日期
用Java计算日期时间,首先考虑到时间类,Java中提供的和时间日期相关的类里,有一个Calendar类,可以获取某个时间日期. 计算某个日期100天后的日期,思路如下: 1.先设定时间,例如2017 ...
- HDU 4949 Light(插头dp、位运算)
比赛的时候没看题,赛后看题觉得比赛看到应该可以敲的,敲了之后发现还真就会卡题.. 因为写完之后,无限TLE... 直到后来用位运算代替了我插头dp常用的decode.encode.shift三个函数以 ...
- 手风琴特效 transition
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- 【leetcode】Distinct Subsequences(hard)
Given a string S and a string T, count the number of distinct subsequences of T in S. A subsequence ...
- 【Git】笔记3
来源:廖雪峰 远程仓库 远程仓库采用github 准备工作:创建远程仓库 1.创建一个github账号 2.在本地设置ssh,获取/home/user/.ssh/id_rsa.pub内容 3.在git ...
- JS不用通过其他转换两个小数加减得到正确答案
之前写过一篇文章js比较两个属于float类型的小数,都需要通过某种函数转换下,太麻烦了,比如: 减法:10.2345-0.01=10.2245,这是正确的答案,但是当你做加法的时候就变了 加法:10 ...
- java课后作业 弹出窗口求两个数的加减乘除
//计算2个数的加减乘除 谷伟华 2015/10/6package jisuan; import javax.swing.JOptionPane; public class Jiasuan { pub ...
- 解决Windows10下80端口被PID为4的System占用的问题
一.背景 最近由于好奇心,更新了windows10系统,感觉上手还蛮快,而且体验还不错,但是在IDEA中做开发时,使用80端口进行启动项目的时候发现端口被占用了,于是尝试解决这个问题.具体步骤如下,分 ...