一个Layout从中心放大和缩小的例子,直接上代码:
1.ScaleDialog.java文件
2. ScaleAnimationHelper.java的辅助类
3. DisplayNextView.java动画结束的监听类
4. Constant.java标识ID常量的类
5.first.xml文件
6.second.xml文件
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>
浙公网安备 33010602011771号