Android仿微信发送语音消息动态提示,支持上滑取消发送

先来几张图说明一下,简单直接:



是不是看了图片就秒懂 了。
下面来分析代码实现,直接撸代码。
主页面 AudioSendActivity.java

package com.example.main;import android.app.Activity;
import android.app.AlertDialog;
import android.graphics.Color;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.util.Log;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.ImageView;
import android.widget.TextView;import com.example.test.R;public class AudioSendActivity extends Activity implements OnTouchListener{private AlertDialog mAudioDialog;private TextView mAudioNotify;private ImageView mVoiceState;private TextView mAudioSend;private boolean mCancelSend;private final String TAG = "AudioSendActivity";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_audiosend);mAudioSend = (TextView) findViewById(R.id.audio_send);mAudioSend.setOnTouchListener(this);}@Overridepublic boolean onTouch(View v, MotionEvent event) {if (v.getId() == R.id.audio_send) {float startY = 0;float endY = 0;boolean send = false;switch (event.getAction()) {case MotionEvent.ACTION_DOWN:startY = event.getY();Log.d(TAG, "audioButtonDown() MotionEvent.ACTION_DOWN");showAudioDialog();break;case MotionEvent.ACTION_UP:endY = event.getY();hideAudioDialog();send = true;break;case MotionEvent.ACTION_MOVE:float moveY = event.getY();int instance = (int) Math.abs((moveY - startY));Log.d(TAG, "--action move--instance:"+instance);if (instance > 100) {changeAudioDialogCancel(true);} else {changeAudioDialogCancel(false);}break;default:break;}return true;}return false;}public void showAudioDialog() {if (mAudioDialog == null) {mAudioDialog = new AlertDialog.Builder(this).create();mAudioDialog.show();mAudioDialog.getWindow().setContentView(R.layout.audio_dialog);mAudioDialog.getWindow().setGravity(Gravity.CENTER);mAudioNotify = (TextView) mAudioDialog.findViewById(R.id.audio_nofity);mVoiceState = (ImageView) mAudioDialog.findViewById(R.id.voice_state);} else if (!mAudioDialog.isShowing()) {mAudioDialog.show();}mVoiceState.setImageResource(R.drawable.message_audio);AnimationDrawable drawable = (AnimationDrawable) mVoiceState.getDrawable();drawable.start();}private void hideAudioDialog() {if (mAudioDialog != null && mAudioDialog.isShowing()) {mAudioDialog.dismiss();}}private void changeAudioDialogCancel(boolean cancel) {if (mCancelSend == cancel)return;if (mAudioDialog != null && mAudioDialog.isShowing()&& mAudioNotify != null) {if (cancel) {mVoiceState.setImageResource(R.drawable.message_voice_quit);mAudioNotify.setTextColor(Color.RED);mAudioNotify.setText(R.string.fingers);} else {mAudioNotify.setTextColor(Color.WHITE);mAudioNotify.setText(R.string.fingers_slide_to);mVoiceState.setImageResource(R.drawable.message_audio);AnimationDrawable drawable = (AnimationDrawable) mVoiceState.getDrawable();drawable.start();}}mCancelSend = cancel;}
}

主页面布局activity_audiosend.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" android:layout_gravity="center"><TextView android:layout_width="wrap_content"android:layout_height="wrap_content"android:background="@color/green"android:layout_alignParentBottom="true"android:layout_centerHorizontal="true"android:layout_marginBottom="200px"android:padding="20px"android:id="@+id/audio_send"android:gravity="center"android:text="按住 发送"/></RelativeLayout>

Dialog对话框布局audio_dialog.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="wrap_content"android:layout_height="match_parent"android:orientation="vertical" android:layout_gravity="center_horizontal"android:background="@drawable/pop_bg"><LinearLayout
        android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal" android:layout_gravity="center_horizontal"><ImageView android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:id="@+id/voice_state"android:src="@drawable/message_audio"/></LinearLayout><TextView android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/fingers_slide_to"android:textColor="@color/white"android:id="@+id/audio_nofity"/></LinearLayout>

voiceState讲话动画message_audio.xml

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"android:oneshot="false" ><item
        android:drawable="@drawable/message_voice_1"android:duration="200"/><item
        android:drawable="@drawable/message_voice_2"android:duration="200"/><item
        android:drawable="@drawable/message_voice_3"android:duration="200"/><item
        android:drawable="@drawable/message_voice_4"android:duration="200"/><item
        android:drawable="@drawable/message_voice_5"android:duration="200"/><item
        android:drawable="@drawable/message_voice_6"android:duration="200"/><item
        android:drawable="@drawable/message_voice_7"android:duration="200"/></animation-list>

代码就这么多,是不是很简单啊,哈哈,喜欢请点个赞,谢谢!

Android仿微信发送语音消息动态提示,支持上滑取消发送相关推荐

  1. android 未读信息反复提醒,Android仿微信未读消息数提示显示数字BadgeView大于99条显示99+...

    [实例简介] Android仿微信未读消息数提示显示数字BadgeView大于99条显示99+ [实例截图] [核心代码] BadgeView └── BadgeView ├── app │   ├─ ...

  2. android动态显示数字,2018-09-26【Android仿微信未读消息数提示数字之BadgeView的使用】...

    给View添加一个角标---ViewBadger的使用 开源地址:https://github.com/jgilfelt/android-viewbadger ImageView iv = (Imag ...

  3. android 仿微信聊天界面 以及语音录制功能,Android仿微信录制语音功能

    本文实例为大家分享了Android仿微信录制语音的具体代码,供大家参考,具体内容如下 前言 我把录音分成了两部分 1.UI界面,弹窗读秒 2.一个类(包含开始.停止.创建文件名功能) 第一部分 由于6 ...

  4. android仿微信发布动态功能,Android仿微信朋友圈发布动态功能

    一.前言 应工作上的要求,需要有一个类似于微信朋友圈发动态上传图片的功能,想起曾经已经做过了,但奈何不忍看自己以前写的代码的惨状,觉得重新封装一个使用方便,易于维护的类似功能的类,自己之后用起来也顺手 ...

  5. CSS仿微信头像右上角消息数字提示

    今天写个简单的小demo,关于CSS实现头像右上角消息数字提示,样式如下如图所示,在微信和扣扣消息里面比较常见. <!DOCTYPE html> <html><head& ...

  6. android+微信语音,android 仿微信按住语音说话(语音聊天)源码下载

    [实例简介] [实例截图] [核心代码] package com.example.weixin_record; import java.util.ArrayList; import java.util ...

  7. android 仿微信朋友圈发布动态功能

    https://blog.csdn.net/qq_34501274/article/details/72911343

  8. Android 仿微信语音录音小控件

    Android 仿微信语音录音小控件 前段时间一直在做IM聊天这方面的撸码工作,涉及到了很多小控件,有时间我会慢慢给大家分享一下我的小成果,希望大家一起学习,一起进步,今天来和大家来说一下Androi ...

  9. android 表情键盘切换,Android仿微信键盘切换效果

    Android 仿微信的键盘切换(录音,表情,文字,其他),IM通讯,类似朋友圈只要涉及到文字等相关的app都会要涉及到键盘的处理,今天就给大家分享一下Android 仿微信的键盘切换. 效果图如下: ...

最新文章

  1. 成为你向往的那只独角兽——《独角兽项目》出版在即
  2. 微软职位内部推荐-SDEII for Windows Phone Apps
  3. Swagger的简单使用
  4. hash-4.hashtable
  5. Java项目课程02:系统概述
  6. FFmpeg实现将图片转换为视频
  7. python刷今日头条阅读量_教你如何提高今日头条号推荐量阅读量播放量
  8. visualGraph 下载
  9. POI合并单元格时CellRangeAddress类提示过时之解决
  10. guile学习(一)guile载入scm文件--2021年10月21日
  11. 算法之美 - 电子书下载(高清版PDF格式+EPUB格式)
  12. No buffer space available终极解决办法
  13. qt 在ubuntu下的下载安装及测试
  14. CSS 实现面包屑导航
  15. iPhone 14连夜跌至4800元,现在应该直接入手14,还是等15?
  16. revit模型怎么在手机上看_模型的查看和定位-Revit基础教程
  17. CS231N课程作业Assignment1--SVM
  18. 元宇宙,是噱头还是创新?
  19. 程序员向架构师转型之路
  20. 《Python 案例》约瑟夫生者死者小游戏

热门文章

  1. 50个怪异的世界纪录
  2. show slave status
  3. java matcher group_Java正则表达式matcher.group()用法
  4. python土味情话_Python微信机器人,聊天、撩妹、提醒,垃圾分类,它样样精通
  5. 钢铁it男的你真的学会了怎么追求女神吗?
  6. 工控一体机如何选型?一文让您快速了解
  7. 项目管理提纲挈领至尊图
  8. MySQL中事务四大特性的实现详解
  9. 怎么使用命令行查看mysql版本号_查看MySql版本号命令
  10. mysql注入模糊_sql模糊查询,以及sql注入问题