`

Layout的放大和缩小效果例子(ScaleAnimation)

阅读更多
一个Layout从中心放大和缩小的例子,直接上代码:
1.ScaleDialog.java文件
package cn.com;

import android.app.Activity;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;

public class ScaleDialog extends Activity implements OnClickListener {

	RelativeLayout layout_parent;
	
	Button scale_btn;

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.first);

		scale_btn = (Button) findViewById(R.id.scale_btn);
		scale_btn.setOnClickListener(this);

		layout_parent = (RelativeLayout) findViewById(R.id.layout_parent);
	}

	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		switch (v.getId()) {
		case R.id.scale_btn:
			displayPage();
			v.setEnabled(false);
			break;
		case R.id.dismiss_btn:
			dismissPage();
			break;
		}

	}

	View layout;
	ImageView jobShadow;

	public void displayPage() {
		LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
		layout = inflater.inflate(R.layout.second, null);
		layout.setId(Constant.KEY_LAYOUT_ID);
		jobShadow = (ImageView) layout.findViewById(R.id.jobShadow);

		Drawable ico = getResources().getDrawable(R.drawable.dbg);
		jobShadow.setBackgroundDrawable(ico);
		ico.mutate().setAlpha(200);

		LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
				LinearLayout.LayoutParams.FILL_PARENT,
				LinearLayout.LayoutParams.FILL_PARENT);
		layout_parent.addView(layout, layoutParams);

		findDialogView();

		// 显示layout进行缩放动画效果
		ScaleAnimationHelper scaleHelper = new ScaleAnimationHelper(this,
				Constant.KEY_FIRSTPAGE);
		scaleHelper.ScaleOutAnimation(layout);
	}

	public void removeLayout() {

		layout_parent.removeView(layout_parent
				.findViewById(Constant.KEY_LAYOUT_ID));
	}

	Button dismiss_btn;

	public void findDialogView() {
		dismiss_btn = (Button) findViewById(R.id.dismiss_btn);
		dismiss_btn.setOnClickListener(this);
	}

	public void dismissPage() {
		ScaleAnimationHelper scaleHelper = new ScaleAnimationHelper(this,
				Constant.KEY_SECONDPAGE);
		scaleHelper.ScaleInAnimation(layout);
		scale_btn.setEnabled(true);
	}
}


2. ScaleAnimationHelper.java的辅助类
package cn.com;

import android.content.Context;
import android.view.View;
import android.view.animation.AccelerateInterpolator;
import android.view.animation.Animation;
import android.view.animation.AnimationSet;
import android.view.animation.ScaleAnimation;

public class ScaleAnimationHelper {
	Context con;
	int order;

	public ScaleAnimationHelper(Context con, int order) {
		this.con = con;
		this.order = order;
	}

	DisplayNextView listener;
	ScaleAnimation myAnimation_Scale;
        //放大的类,不需要设置监听器
	public void ScaleOutAnimation(View view) {
		myAnimation_Scale = new ScaleAnimation(0.1f, 1.0f, 0.1f, 1f,
				Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,
				0.5f);
		myAnimation_Scale.setInterpolator(new AccelerateInterpolator());
		AnimationSet aa = new AnimationSet(true);
		aa.addAnimation(myAnimation_Scale);
		aa.setDuration(500);

		view.startAnimation(aa);
	}

	public void ScaleInAnimation(View view) {
		listener = new DisplayNextView((ScaleDialog) con, order);
		myAnimation_Scale = new ScaleAnimation(1.0f, 0.0f, 1.0f, 0.0f,
				Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,
				0.5f);
		myAnimation_Scale.setInterpolator(new AccelerateInterpolator());
               //缩小Layout的类,在动画结束需要从父View移除它
		myAnimation_Scale.setAnimationListener(listener);
		AnimationSet aa = new AnimationSet(true);
		aa.addAnimation(myAnimation_Scale);
		aa.setDuration(500);

		view.startAnimation(aa);
	}
}


3. DisplayNextView.java动画结束的监听类
package cn.com;

import android.app.Activity;
import android.view.animation.Animation;

public class DisplayNextView implements Animation.AnimationListener {

	Object obj;

	// 动画监听器的构造函数
	Activity ac;
	int order;

	public DisplayNextView(Activity ac, int order) {
		this.ac = ac;
		this.order = order;
	}

	public void onAnimationStart(Animation animation) {
	}

	public void onAnimationEnd(Animation animation) {
		doSomethingOnEnd(order);
	}

	public void onAnimationRepeat(Animation animation) {
	}

	private final class SwapViews implements Runnable {
		public void run() {
			switch (order) {
			case Constant.KEY_SECONDPAGE:
				((ScaleDialog) ac).removeLayout();
				break;
			}
		}
	}

	public void doSomethingOnEnd(int _order) {
		switch (_order) {
		
		case Constant.KEY_SECONDPAGE:
			((ScaleDialog) ac).layout_parent.post(new SwapViews());
			break;
		}
	}
}


4. Constant.java标识ID常量的类
package cn.com;

public class Constant {

	public final static int KEY_FIRSTPAGE = 1;
	
	public final static int KEY_SECONDPAGE = 2;
	
	public final static int KEY_LAYOUT_ID = 3;
}



5.first.xml文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="vertical" android:layout_width="fill_parent"
	android:layout_height="fill_parent" android:id="@+id/layout_parent">
	<Button android:text="Scale" android:id="@+id/scale_btn"
		android:layout_width="fill_parent" android:layout_height="wrap_content"></Button>
</RelativeLayout>



6.second.xml文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:layout_width="fill_parent" android:layout_height="fill_parent"
	android:id="@+id/jobContent">
	<ImageView android:layout_width="fill_parent"
		android:layout_height="fill_parent" android:id="@+id/jobShadow" />
	<Button android:layout_width="fill_parent" android:text="Dismiss"
		android:layout_marginTop="20dp" android:layout_height="wrap_content"
		android:src="@drawable/jobbg" android:layout_alignParentBottom="true"
		android:id="@+id/dismiss_btn" />
</RelativeLayout>






分享到:
评论
1 楼 sunnygql 2011-09-29  
借鉴想做一个页面的缩放的实现……说说原理呗

相关推荐

    一个关于android Gallery图片点击后放大缩小的例子

    通过分析和学习这个项目,你可以更好地理解和实践在旧版Android系统中如何利用`Gallery`实现图片点击后渐进式放大缩小的效果。不过,对于新项目,建议使用现代的组件和方法来替换`Gallery`,以获得更好的性能和用户...

    android scaleanimation 代码

    它允许我们在指定的坐标轴上放大或缩小视图,从而为用户界面增添动态感和交互性。本篇文章将深入探讨如何使用代码创建并应用ScaleAnimation。 首先,我们需要了解ScaleAnimation的基本构造。ScaleAnimation类有四个...

    安卓Gallery照片墙画廊图库相关-Android图片放大缩小点击进行放大再次点击就缩小到原来的地方.rar

    6. **动画效果**:为了使放大和缩小更平滑,可以使用 Animation API 来添加动画效果。例如,可以创建一个ScaleAnimation对象,设置初始和结束的缩放比例,然后将其应用到ImageView上。 7. **图片缓存**:如果应用...

    Android RecyclerView 点击Item Item变大缩小的效果

    - **ScaleAnimation**:使用`android.view.animation.ScaleAnimation`类,可以缩放View的宽度和高度。设置动画的开始和结束比例,以及动画的持续时间。 - **ObjectAnimator**:更现代且灵活的选择,可以直接修改...

    Android图片拖动、点击放大效果

    本项目"Android图片拖动、点击放大效果"提供了一个具体的解决方案,利用Gallery组件和ScaleAnimation类来达到目标。 首先,Gallery组件是Android SDK中的一个特殊视图,它允许用户水平滚动一系列的视图,类似于iOS...

    android gallery 放大效果

    你可以监听`Gallery`的`onItemClick`事件,当用户点击某个图片时,可以使用`ZoomAnimation`或`ScaleAnimation`来实现放大效果。以下是一个简单的动画示例: ```java gallery.setOnItemClickListener(new ...

    android 图片放大缩小 有图

    在Android开发中,图片的放大和缩小是一个常见的需求,特别是在用户界面设计和图像处理中。Android提供了多种方式来实现图片的缩放操作,这通常涉及到Bitmap对象和ImageView组件的使用。下面将详细介绍Android图片...

    Tween_android.rar_ScaleAnimation_android

    Tween动画和ScaleAnimation是Android视图动画系统中的两个重要概念,它们帮助开发者实现丰富的视觉效果。在这个名为"Tween_android.rar_ScaleAnimation_android"的压缩包中,可能包含了一个示例项目,用于演示如何在...

    仿win8效果的例子

    这个项目主要关注两个关键特性:一是允许用户通过拖拽来改变元素的位置,二是实现点击元素时的放大缩小效果,以及多屏幕间的切换功能。这样的设计可以提升应用程序的交互性和视觉吸引力。 首先,我们要理解拖拽操作...

    ListView头图片下拉放大效果

    "ListView头图片下拉放大效果"就是一种常见的交互设计,当用户下拉ListView时,头部的图片会逐渐放大,释放时则恢复原状,为用户提供了可视化的反馈。 实现这个效果主要涉及到以下几个关键知识点: 1. **自定义...

    android实现的放大镜

    - 缩放动画可以使用`ScaleAnimation`,让放大镜在放大和缩小过程中有平滑的过渡。 5. **兼容性** - 考虑到Android设备的多样性,确保放大镜功能在不同版本和设备上都能正常工作是非常重要的。测试并适配各种...

    Android++gallery实现选中放大的效果

    在`getView()`方法中,我们可以通过监听`ImageView`的点击事件来实现选中放大效果。可以使用`ScaleAnimation`来实现缩放动画。以下是一个简单的示例: ```java @Override public View getView(int position, View ...

    Qt自定义控件动画效果按钮

    例如,我们可以创建一个缩放动画,当鼠标悬停在按钮上时,按钮会逐渐放大,离开时则缩小回原始大小。 ```cpp class AnimatedButton : public QPushButton { Q_OBJECT public: AnimatedButton(QWidget *parent = ...

    Android 动画之ScaleAnimation应用详解

    ScaleAnimation允许开发者控制对象在X轴和Y轴上的缩放比例,从而创建放大或缩小的动画效果。下面我们将逐一解释其关键参数: 1. `float fromX`:这个参数定义了动画开始时对象在X轴上的缩放因子。如果值为0.5f,...

    仿QQ头像点击放大

    ScaleAnimation类是Android提供的一个用于改变视图大小的动画类,它可以控制视图在X轴和Y轴上的缩放比例,从而实现放大或缩小的效果。通过设置动画的持续时间、起始和结束的缩放比例,可以定制出不同的动画效果。 ...

    Gallery放大,跳动效果

    在本项目中,标题"Gallery放大,跳动效果"表明我们将会探讨如何为`Gallery`添加一种更加生动活泼的滑动动画,使用户交互体验更加人性化。`CustomGallery`和`GalleryAni`这两个Java类很可能是实现这种效果的关键。 `...

    点击按钮放大图片.zip

    下面是一个简单的示例,将ImageView的宽度和高度乘以2来实现放大效果: ```java imageView.getLayoutParams().width *= 2; imageView.getLayoutParams().height *= 2; imageView.requestLayout(); ``` 为了提供更...

    带下拉放大效果的ListView

    4. **动画效果**:为了实现放大效果,开发者可能会使用Android的Animation框架,创建一个ScaleAnimation对象,设置初始和结束的缩放比例,然后将其应用到顶布局上。此外,还可能使用ValueAnimator进行更精细的控制,...

    按钮点击缩放的效果

    总的来说,使用ScaleAnimation实现按钮点击缩放效果是Android UI动态设计的一个基本技巧,它可以增加应用的视觉吸引力和用户体验。掌握这类基础动画技术,对于提升应用的整体质量至关重要。在实际开发中,还可以结合...

Global site tag (gtag.js) - Google Analytics