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 知识 ...
随机推荐
- Openstack Neutron 允许VM流量转发
neutron port-update <port-id> --port-security-enabled=False --no-security-groups
- Oracle 级联删除
alter table ForeignTable(附表)add constraint fk_MainTable_ForeignTable(关联表中的外键) foreign key(ForeignTab ...
- irssi忽略退出,加入消息
IRSSI: IGNORE JOINS, PARTS, QUITS AND NICKS MESSAGES I use IRC on a daily basis and my client of cho ...
- Innodb 表空间卸载、迁移、装载
从MySQL的Innodb特性中我们知道,Inndob的表空间有共享和独享的特点,如果是共享的.则默认会把表空间存放在一个文件中(ibdata1),当开启独享表空间参数Innodb_file_per_ ...
- Django~urls.py--->views.py
The 'r' in front of each regular expression string is optional but recommended. It tells Python that ...
- Python缩小图像
LyncLynn用途: 缩小图像 # -*- coding: UTF-8 -*- #Version: V1.0 #Author:lynclynn #CreateDate:20151201 #Updat ...
- ubuntu10.04+win7双系统,重装win7后,恢复grub引导菜单以及命令行引导linux
我在我的小Y上安装了ubuntu10.04和win7旗舰版的双系统,采用的是grub引导.今天win7不知道哪儿出了问题,windows update更新一直报错,(当然360也是打不上滴)网上查了很 ...
- java”伪“批量上传
jsp页面代码 <form method="post" action="" enctype="multipart/form-data" ...
- Spring面向切面编程(AOP)
1 spring容器中bean特性 Spring容器的javabean对象默认是单例的. 通过在xml文件中,配置可以使用某些对象为多列. Spring容器中的javabean对象默认是立即加载(立即 ...
- ASINetworkQueues(经典2)
ASINetworkQueues, 它的delegate提供更为丰富的功能 提 供的更多的回调方法如下: a,requestDidStartSelector,请求发起时会调此方法,你可以在此方法中跟据 ...