Android仿通话来电界面效果
作者:tracydragonlxy 发布时间:2022-01-02 07:48:51
标签:Android,通话,来电界面
Android仿通话来电界面,供大家参考,具体内容如下
简介:开发中需要模拟来电时的通话界面,仿照来电界面实现来电时播放铃声,界面通过动画模拟来电动效。
效果图:
自定义图片背景,图片由小变大的动态效果。
shap_circle.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="65dp"/>
<solid android:color="#31DE87"/>
</shape>
布局文件activity_my_call.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:keepScreenOn="true"
tools:context=".MyCall.MyCallActivity">
<ImageView
android:id="@+id/iv_bg"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"
android:src="@mipmap/img1"/>
<ImageView
android:id="@+id/iv_head"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="60dp"
android:src="@mipmap/header"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"/>
<TextView
android:id="@+id/tv_phone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="+86-123-4567 8910"
android:textSize="24sp"
android:textStyle="bold"
android:textColor="#fff"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/iv_head"/>
<TextView
android:id="@+id/tv_from"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:textColor="#fff"
android:textSize="20sp"
android:text="深圳市 中国移动来电"
app:layout_constraintTop_toBottomOf="@id/tv_phone"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"/>
<ImageView
android:id="@+id/iv_hang_up"
android:layout_width="64dp"
android:layout_height="64dp"
android:src="@mipmap/hang_up"
android:layout_marginBottom="60dp"
app:layout_constraintBottom_toTopOf="@id/iv_wave1"
app:layout_constraintStart_toStartOf="@id/iv_wave1"
app:layout_constraintEnd_toEndOf="@id/iv_wave1" />
<ImageView
android:id="@+id/iv_wave1"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_marginBottom="200dp"
android:background="@drawable/shape_circle"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"/>
<ImageView
android:id="@+id/iv_wave2"
android:layout_width="60dp"
android:layout_height="60dp"
android:background="@drawable/shape_circle"
app:layout_constraintTop_toTopOf="@id/iv_wave1"
app:layout_constraintBottom_toBottomOf="@id/iv_wave1"
app:layout_constraintStart_toStartOf="@id/iv_wave1"
app:layout_constraintEnd_toEndOf="@id/iv_wave1"/>
<ImageView
android:id="@+id/iv_call"
android:layout_width="48dp"
android:layout_height="48dp"
android:src="@mipmap/call_in"
app:layout_constraintTop_toTopOf="@id/iv_wave1"
app:layout_constraintBottom_toBottomOf="@id/iv_wave1"
app:layout_constraintStart_toStartOf="@id/iv_wave1"
app:layout_constraintEnd_toEndOf="@id/iv_wave1"/>
<ImageView
android:id="@+id/iv_answer"
android:layout_width="64dp"
android:layout_height="64dp"
android:src="@mipmap/answer"
android:layout_marginTop="60dp"
app:layout_constraintStart_toStartOf="@id/iv_wave1"
app:layout_constraintEnd_toEndOf="@id/iv_wave1"
app:layout_constraintTop_toBottomOf="@id/iv_wave1"/>
</androidx.constraintlayout.widget.ConstraintLayout>
MyCallActivity.java
public class MyCallActivity extends AppCompatActivity {
ImageView iv1, iv2;
private MediaPlayer mMediaPlayer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_call);
ImageView ivBg = findViewById(R.id.iv_bg);
Glide.with(this)
.load(R.mipmap.img2)
.apply(RequestOptions.bitmapTransform(new BlurTransformation(25, 6)))
.into(ivBg);
iv1 = findViewById(R.id.iv_wave1);
iv2 = findViewById(R.id.iv_wave2);
mMediaPlayer = MediaPlayer.create(this,
RingtoneManager.getActualDefaultRingtoneUri(this, RingtoneManager.TYPE_RINGTONE));
mMediaPlayer.setLooping(true);
playRingTone();
setAnim1();
setAnim2();
}
@Override
protected void onPause() {
super.onPause();
iv1.clearAnimation();
iv2.clearAnimation();
}
@Override
protected void onDestroy() {
super.onDestroy();
stopRingTone();
}
public void playRingTone(){
if (mMediaPlayer.isPlaying()) {
return;
}
mMediaPlayer.start();
}
public void stopRingTone() {
if (mMediaPlayer.isPlaying()) {
mMediaPlayer.stop();
mMediaPlayer.release();
}
}
private void setAnim1() {
AnimationSet as = new AnimationSet(true);
//缩放动画,以中心从原始放大到1.4倍
ScaleAnimation scaleAnimation = new ScaleAnimation(1.0f, 1.4f, 1.0f, 1.4f,
ScaleAnimation.RELATIVE_TO_SELF, 0.5f,
ScaleAnimation.RELATIVE_TO_SELF, 0.5f);
//渐变动画
AlphaAnimation alphaAnimation = new AlphaAnimation(1.0f, 0.5f);
scaleAnimation.setDuration(800);
scaleAnimation.setRepeatCount(Animation.INFINITE);
alphaAnimation.setRepeatCount(Animation.INFINITE);
as.setDuration(800);
as.addAnimation(scaleAnimation);
as.addAnimation(alphaAnimation);
iv1.startAnimation(as);
}
private void setAnim2() {
AnimationSet as = new AnimationSet(true);
//缩放动画,以中心从1.4倍放大到1.8倍
ScaleAnimation scaleAnimation = new ScaleAnimation(1.4f, 1.8f, 1.4f, 1.8f,
ScaleAnimation.RELATIVE_TO_SELF, 0.5f,
ScaleAnimation.RELATIVE_TO_SELF, 0.5f);
//渐变动画
AlphaAnimation alphaAnimation = new AlphaAnimation(0.5f, 0.1f);
scaleAnimation.setDuration(800);
scaleAnimation.setRepeatCount(Animation.INFINITE);
alphaAnimation.setRepeatCount(Animation.INFINITE);
as.setDuration(800);
as.addAnimation(scaleAnimation);
as.addAnimation(alphaAnimation);
iv2.startAnimation(as);
}
}
来源:https://blog.csdn.net/tracydragonlxy/article/details/120438481


猜你喜欢
- 本文实例讲述了C#采用HttpWebRequest实现保持会话上传文件到HTTP的方法,在项目开发中有一定的实用价值,具体方法如下:一、前言
- .NET包含一个特殊的Object类,可以接受任意的数据类型的值,当所传递或所赋值的类型不是一个特定的数据类型时,object类就提供了一种
- C#是一门面向对象的语言,具有面向对象的基本特征,抽象、封装、继承、多态等性质。学习C#除了一些基本的语法,还得学习一些新的特性,比如说:泛
- 本文实例讲述了Java Socket使用加密协议进行传输对象的方法。分享给大家供大家参考,具体如下:前面的几篇文章介绍了Socket中一些常
- 本文实例讲述了C#调用Oracle存储过程的方法。分享给大家供大家参考。具体实现方法如下:Oracle数据库代码如下:create or r
- 学习java的人都知道spring,springMVC,mybatis等框架,像structs2这样的框架是基于servlet以外实现的,而
- 很多时候你新建了Maven 或者SpringBoot 工程,激动的点了主启动类,你就发现了下面的错误这里说的是啥意思呢,你没有数据库相关的链
- 一、简介应用程序配置文件(App.config)是标准的 XML 文件,XML 标记和属性是区分大小写的。它是可以按需要更改的,开发人员可以
- 普通的公有继承class test1{public: test1(int i) :num1(i) {}privat
- android RecyclerView不像过去的ListView那样随意的设置水平方向的分割线,如果要实现RecyclerView的水平/
- Java 8 最大的特性无异于更多地面向函数,比如引入了lambda等,可以更好地进行函数式编程。前段时间无意间发现了map.merge()
- 项目中有需要多次统计 某些集合中 的某个属性值,所以考虑封装一个方法,让其其定义实现计算方式。 话不多说,看代码:1、封装的自定义集合工具类
- 介绍原型模式(Prototype Pattern):使用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式是一种对象创建
- 首先引入依赖 implementation 'com.github.bumptech.glide:glid
- 已经自学OpencvSharp一段时间了(目前工作用的是C#,就学了Opencvsharp了,vs2015,opencvsharp3),收获
- 第一步:后端简单建个SpringBoot项目,提供一个 helloWorld接口;版本选用 2.2.6.RELEASEpackage com
- 此次简单的操作将数据从数据库导出生成excel报表以及将excel数据导入数据库首先建立数据库的连接池:package jdbc;impor
- 在安卓操作系统下对于 TextView 字体的支持非常有限,默认情况下 TextView 的 typeface 属性支持 "San
- 本文实例讲述了C#画笔使用复合数组绘制单个矩形的方法。分享给大家供大家参考。具体实现方法如下:using System;using Syst
- PROPAGATION_REQUIRED: 如果存在一个事务,则支持当前事务。如果没有事务则开启事务;PROPAGATION_REQUIRE