`
onewayonelife
  • 浏览: 259756 次
  • 性别: Icon_minigender_1
  • 来自: 太原
社区版块
存档分类
最新评论

Android 电视关机动画

 
阅读更多

MainActivity

package org.wp.activity;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

public class MainActivity extends Activity {
	private ImageView myImageView = null;
	private Button myButton = null;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		myImageView = (ImageView) this.findViewById(R.id.myImageView);
		myButton = (Button) this.findViewById(R.id.myButton);
		myButton.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				myImageView.startAnimation(new TVOffAnimation());
			}
		});
	}
}

 

TVOffAnimation

package org.wp.activity;

import android.graphics.Matrix;
import android.view.animation.AccelerateDecelerateInterpolator;
import android.view.animation.Animation;
import android.view.animation.Transformation;

public class TVOffAnimation extends Animation {
	/** 中心点X坐标 **/
	private int centerX = 0;
	/** 中心点Y坐标 **/
	private int centerY = 0;

	@Override
	public void initialize(int width, int height, int parentWidth,
			int parentHeight) {
		// void setDuration (long durationMillis)
		// Since: API Level 1 How long this animation should last.
		// The duration cannot be negative.
		setDuration(500);

		// void setFillAfter(boolean fillAfter)
		// If fillAfter is true, the transformation that this animation
		// performed will persist when it is finished.
		setFillAfter(true);

		// 获得图片中心点X坐标
		centerX = width / 2;
		// 获得图片中心点Y坐标
		centerY = height / 2;

		// void setInterpolator (Interpolator i)
		// Since: API Level 1 Sets the acceleration curve for this animation.
		// Defaults to a linear interpolation.
		// setInterpolator(new AccelerateDecelerateInterpolator())
		// 选择一个速度的效果
		// AccelerateDecelerateInterpolator
		// An interpolator where the rate of change starts and ends slowly
		// but accelerates through the middle.
		setInterpolator(new AccelerateDecelerateInterpolator());
	}

	/**
	 * preScale(float sx, float sy, float px, float py) 
	 * px 和  py 是固定点,
	 * 例如 px,py=0,0 的话,
	 * 图像会以左上角为基点,向右向下放大缩小。
	 * 
	 * 如果是图中心的话,图像便会以图中心为基点,
	 * 向上下左右等比例的放大缩小。
	 * 
	 * 一般情况下,如果图像的内部座标不重要的话,
	 * 只用preScale(sy, sy)就可以了。
	 * 要用到px,py的情况,通常是前后还有牵涉Animation的运作。
	 * 
	 * 简单讲,放大比例不会改变,都是按sx和sy决定。
	 * 只是px,py那点,在放大前和放大后都会不变。
	 * 
	 * 例如: 一个(width)20 (height)10的长方形,
	 * 左上角座标是(0,0)。那右下角是(20,10)。
	 * 如果sx,sy=2,2  即放大两倍。
	 * 当px ,py=0,0放大后,左上角仍然是(0,0),但右下角会变成(40,20)。
	 * 
	 * 但同样是sx,sy=2,2,但px,py=10,5的话,
	 * 放大后,左上角会是(-10,-5)而右下角会是(30,15)。
	 * 唯一座标不变的就只有10,5 那点。但长方形仍然会放大两倍。
	 * 
	 * 看上去没有什么不同,但如果用上Animation的话,
	 * 因为Animation对座标是有要求,所以效果也会有不同。
	 * 
	 * 
	 * interpolatedTime 表示的是当前动画的间隔时间 范围是0-1
	 * 
	 * 那么横向来讲前80%的时间我们要横向拉伸到150%,
	 * 变化的速率为 0.5 / 0.8 = 0.625 
	 * 所以横向缩放值为 1 + 0.625f * interpolatedTime
	 * 
	 * 纵向在前80%的时间是直接减小,最后只留一条高度为0.01f的线。 
	 * 变化的速率为 1 / 0.8 = 1.25 
	 * 所以纵向缩放值为 1 - 1.25f * interpolatedTime + 0.01f
	 * 当然也可以写成 1 - interpolatedTime / 0.8f + 0.01f
	 * 
	 * 后20%的时间里我们要横向从150%压缩至0%, 
	 * 变化的速率为 1.5 / 0.2 = 7.5 
	 * 所以横向缩放值为 7.5f * (1 - interpolatedTime)
	 * 
	 * 纵向保持不变就好了,当横向为0的时候就全部消失了。
	 */
	@Override
	protected void applyTransformation(float interpolatedTime, Transformation t) {
		final Matrix matrix = t.getMatrix();
		if (interpolatedTime < 0.8) {
			matrix.preScale(1 + 0.625f * interpolatedTime,
					1 - 1.25f * interpolatedTime + 0.01f, centerX, centerY);
		} else {
			matrix.preScale(7.5f * (1 - interpolatedTime), 0.01f, 
					centerX, centerY);
		}
	}
}

 

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:layout_width="fill_parent"
	android:layout_height="fill_parent"
	android:orientation="vertical"
	android:gravity="center">
	<ImageView android:layout_width="wrap_content"
		android:layout_height="wrap_content"
		android:src="@drawable/bg"
		android:id="@+id/myImageView" />
	<Button android:layout_width="wrap_content"
		android:layout_height="wrap_content"
		android:layout_marginTop="20dip"
		android:text="power off"
		android:id="@+id/myButton" />
</LinearLayout>

 

 

 

分享到:
评论

相关推荐

    android 电视关机动画

    下面我们将深入探讨Android电视关机动画的相关知识点。 一、Android系统架构与关机动画 Android系统是基于Linux内核的操作系统,它有一个层次化的框架,包括硬件抽象层(HAL)、库层、系统服务层、应用框架层以及...

    android开关机动画和铃声配置

    Android 开关机动画和铃声配置 Android 开关机动画和铃声配置是 Android 系统中的一项重要功能,涉及到系统的启动和关闭过程中的视觉和听觉体验。下面我们将详细介绍 Android 开关机动画和铃声配置在 MTK 和 SPD 两...

    android之关机动画

    Android 之关机动画 Android 系统的开关机动画设计是 Android 系统中非常重要的一部分。开关机动画的设计方式可以体现出系统的美观度和用户体验度。下面我们将详细地介绍 Android 系统中的开关机动画设计。 一、...

    Android(Q)10.0添加关机音乐和关机动画.rar

    在Android系统中,关机音乐和关机动画是提升用户体验的重要元素之一,它们不仅增加了系统的个性化,也使得用户在操作设备时能感受到更多的互动乐趣。本文将深入探讨如何在Android Q (10.0)系统中添加关机音乐和关机...

    Android开关机动画

    Android开关机动画是Android系统中一个重要的组成部分,它在设备启动和关闭时为用户呈现动态视觉效果,增加了系统的个性化和用户体验。制作精美的开关机动画不仅能够提升品牌形象,也能为用户带来愉悦的操作体验。 ...

    android开关机动画切换

    在Android系统中,开关机动画是用户在启动或关闭设备时看到的一系列动态图像,它不仅为用户提供了视觉反馈,也是品牌识别的一部分。本主题主要关注如何在Android系统中进行开关机动画的切换,这对于特定的移动开发...

    展讯6820 android开关机动画和铃声源码

    在Android系统中,开关机动画和铃声是用户界面的重要组成部分,它们不仅提供了视觉和听觉的反馈,也是用户与设备互动的初步体验。本文将详细探讨展讯6820 android开关机动画和铃声源码的相关知识点。 首先,我们要...

    android开关机动画开关机铃声修改方法

    ### Android开关机动画与铃声修改方法 #### 开机画面(第一屏开机Logo) 开机Logo是在烧录系统时被烧录进去的,在Linux启动时就会显示该图片。后期如果需要修改,只需更改烧录时选择的`boot_logo`即可。需要注意的...

    Android 修改系统关机动画的实现

    在Android开发中,系统关机动画是用户体验的重要组成部分。尤其对于那些从事移动设备开发的人员来说,自定义关机动画是一项基本技能。本文将详细介绍如何修改Android系统关机动画,并提供一个简单的实现示例。 首先...

    Android 12 开关机动画客制化patch

    在Android系统中,开关机动画是用户每次启动或关闭设备时看到的一系列动态图像,它不仅为设备增添了个性化元素,也是用户体验中不可或缺的一部分。随着Android系统的不断更新,开发者们有了更多的机会来定制这些动画...

    开关机动画及图片修改

    例如,在Android系统中,开关机动画的更改可能涉及到修改`system/core/init`目录下的启动脚本,或修改`frameworks/base/core/java/android/view/WindowManagerService.java`等文件,以及相应的XML配置文件。...

    MTK切换开关机动画

    MTK切换开关机动画是针对基于MediaTek(MTK)芯片组的Android设备的一个功能,特别是在ICS(Ice Cream Sandwich)系统平台上实现的。MediaTek是一家知名的半导体公司,为各种智能设备提供芯片解决方案,包括智能手机...

    安卓开关机动画

    安卓开关机动画是Android操作系统中一个重要的视觉元素,它在设备开机和关机时呈现,为用户带来品牌识别度和个性化体验。开关机动画不仅包括启动画面,也包含关闭过程中的动画效果,这些动画通常由一系列连续的图像...

    联通关机动画

    联通关机动画这个主题主要涉及到的是如何自定义或更改手机的关机动画和声音,这通常是Android系统的一个特性,因为iOS等其他系统通常不允许用户直接修改这些元素。 首先,我们要理解什么是关机动画。关机动画是在...

    HTC关机动画

    在Android系统中,关机动画通常是由一系列PNG或JPEG图片序列组成的,这些图片在短时间内连续播放,创造出动态的效果。此外,还会有一个XML配置文件来定义动画的播放速度、顺序和其他属性。 这个【HTC关机动画】包...

    MTK Android12 (S) 开机动画

    MTK Android12 (S) 开机动画是一个针对MediaTek(MTK)芯片平台的定制化Android系统组件,主要涉及到手机或设备启动时显示的Logo和动画效果。这些资源文件和代码是Android操作系统的一部分,用于在设备启动时提供...

    android关机重启功能实现

    以上就是关于Android关机和重启功能实现的一些基本知识。在实际开发中,你需要根据具体的项目需求和设备环境来调整和优化代码。如果你只是想在应用中提供一个模拟的关机或重启效果,可以考虑使用动画或者加载屏幕来...

    如何客制化自己的开关机动画、开关机铃声

    通过以上步骤,您可以轻松地为您的Android设备定制个性化的开关机动画和开关机铃声。这不仅能够提升用户体验,还能让设备更具个性化特色。请注意,在进行上述操作时,需要确保遵循正确的步骤和格式,以免出现兼容性...

    MTK Android13 自定义开机动画和铃声

    1.使用google的bootanimation,不支持开机铃声2.所以修改为使用mtkbootanimation,但基线代码会报错,此资源完美解决编译报错问题,并解决首次开机无铃声的问题。

Global site tag (gtag.js) - Google Analytics