Android自定义View—带有动画的Dialog

MainActivity如下:

package cc.testview1;

import android.os.Bundle;
import android.app.Activity;
/**
 * Demo描述:
 * 自定义Dialog,在Dialog中有动画(旋转动画或者帧动画)效果
 */
public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		//第一种-->rotate动画
		LoadingDialogFirst loadingDialogFirst=new LoadingDialogFirst(this,R.style.dialog);
		loadingDialogFirst.show();
		
		//第二种-->frame动画
		//LoadingDialogSecond loadingDialogSecond=new LoadingDialogSecond(this,R.style.dialog);
		//loadingDialogSecond.show();
		
	}
}


LoadingDialogFirst如下:

package cc.testview1;

import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;

public class LoadingDialogFirst extends Dialog {
    private ImageView  mLoadingImageView;
    private Animation mLoadingAnimation;
	public LoadingDialogFirst(Context context, boolean cancelable,OnCancelListener cancelListener) {
		super(context, cancelable, cancelListener);
	}

	public LoadingDialogFirst(Context context, int theme) {
		super(context, theme);
	}

	public LoadingDialogFirst(Context context) {
		super(context);
	}
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		View loadingView=LayoutInflater.from(getContext()).inflate(R.layout.loading, null);
		mLoadingImageView=(ImageView) loadingView.findViewById(R.id.loadingImageView);
		setContentView(loadingView);
	}
	
	@Override
	public void show() {
		super.show();
		mLoadingAnimation=AnimationUtils.loadAnimation(getContext(), R.anim.loadinganimfirst);
		mLoadingImageView.startAnimation(mLoadingAnimation);
	}
	@Override
	public void dismiss() {
		super.dismiss();
		mLoadingAnimation.cancel();
	}

}

LoadingDialogSecond如下:

package cc.testview1;
import android.app.Dialog;
import android.content.Context;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.os.Handler;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;

public class LoadingDialogSecond extends Dialog {
    private ImageView  mLoadingImageView;
    private AnimationDrawable mLoadingAnimationDrawable;
	public LoadingDialogSecond(Context context, boolean cancelable,OnCancelListener cancelListener) {
		super(context, cancelable, cancelListener);
	}

	public LoadingDialogSecond(Context context, int theme) {
		super(context, theme);
	}

	public LoadingDialogSecond(Context context) {
		super(context);
	}
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		View loadingView=LayoutInflater.from(getContext()).inflate(R.layout.loading, null);
		mLoadingImageView=(ImageView) loadingView.findViewById(R.id.loadingImageView);
		mLoadingImageView.setImageResource(R.anim.loadinganimsecond);
		setContentView(loadingView);
	}
	
	@Override
	public void show() {
		super.show();
		//注意将动画的启动放置在Handler中.否则只可看到第一张图片
		new Handler(){}.postDelayed(new Runnable() {
			@Override
			public void run() {
				mLoadingAnimationDrawable =(AnimationDrawable) mLoadingImageView.getDrawable();
				mLoadingAnimationDrawable.start();
			}
		}, 10);
	}
	@Override
	public void dismiss() {
		super.dismiss();
		//结束帧动画
		mLoadingAnimationDrawable =(AnimationDrawable) mLoadingImageView.getDrawable();
	    mLoadingAnimationDrawable.stop();
	}

}


main.xml如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
    
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="30dip"
        />
     
</RelativeLayout>


loading.xml如下:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center" >

    <TextView
        android:id="@+id/loadingTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="loading..." />

    <ImageView
        android:id="@+id/loadingImageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/loadingTextView"
        android:src="@drawable/ic_launcher" 
        />

</RelativeLayout>


loadinganimfirst.xml如下:

<?xml version="1.0" encoding="utf-8"?>

<set xmlns:android="http://schemas.android.com/apk/res/android" >
    <rotate 
       android:fromDegrees="90"
       android:toDegrees="-90"
       android:pivotX="50%"
       android:pivotY="50%"
       android:duration="4000"
       android:repeatCount="infinite"
       android:repeatMode="reverse"
   />
</set>


loadinganimsecond.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/photo1" android:duration="500" />
    <item android:drawable="@drawable/photo2" android:duration="500" />
    <item android:drawable="@drawable/photo3" android:duration="500" />
</animation-list>




Android自定义View—带有动画的Dialog

上一篇:微信公众号开发教程


下一篇:微信view类型的菜单获取openid范例