热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

MainActivity如下:packagecc.testview1;importandroid.os.Bundle;importandroid.app.Activity

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如下:

xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
> android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world"
android:layout_centerHorizOntal="true"
android:layout_marginTop="30dip"
/>


loading.xml如下:


android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center" >
android:id="@+id/loadingTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="loading..." />
android:id="@+id/loadingImageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/loadingTextView"
android:src="@drawable/ic_launcher"
/>


loadinganimfirst.xml如下:



android:fromDegrees="90"
android:toDegrees="-90"
android:pivotX="50%"
android:pivotY="50%"
android:duration="4000"
android:repeatCount="infinite"
android:repeatMode="reverse"
/>


loadinganimsecond.xml如下:


xmlns:android="http://schemas.android.com/apk/res/android"
android:Oneshot="false">







推荐阅读
  • Matplotlib笔记:设置画布属性并保存图片(figsize,dpi,savefig)
    设置画布属性并保存图片importmatplotlib.pyplotaspltplt.figure(figsize(10,4),dpi80)#图片长宽和清晰度plt.p ... [详细]
  • 内存暴增排查分析
    一次偶然间,发现测试环境iis站点内存突然间暴增,平常都是300M,这次一下子暴增到8g于是就开始了接下来的分析发现Dictionary居然有1.78g懵逼windbg分析1.看看 ... [详细]
  • 1011-MarriageCeremoniesPDF(English)StatisticsForumTimeLimit:2second(s)MemoryLimit:32MBYouw ... [详细]
  • ProblemDescription:Readtheprogrambelowcarefullythenanswerthequestion.#pragmacomment(linker ... [详细]
  • AtCoder Beginner Contest 176   EBomber   (思维)
    题意:有一张$H$x$W$的图,给你$M$个目标的位置,你可以在图中放置一枚炸弹,炸弹可以摧毁所在的那一行和一列,问最多可以摧毁多少目标.题解:首先我们记录某一行和某一列目标最多的 ... [详细]
  • -(void)drawRect:(CGRect)rect{获得当前上下文CGContextRefctxUIGraphicsGetCurrentContext();把当前上下文状态保 ... [详细]
  • diskmark使用教程
    首先说明一下软件各个参数的意义。1~9测试次数;50MB~4000MB测试规模;C,D,E,F选择测试对象;ALL测试以下所有;第一行代表你硬盘的读写速度。第二行代表你硬盘4K文件 ... [详细]
  • iOS Auto Layout Demystify
    BookDescripterAutoLayouttransformsthewayyoucreateiOSuserinterfaces.Asflexibleasitispowerfu ... [详细]
  • String字符串java.lang;基本标识Java字符串的一个重要特点就是字符串不可变。finalclassString没有子类字符串字面量也是一个String类的实例存储在字 ... [详细]
  • Winrar大全
    极速压缩win5.0下载:win_x86_cnwin_x86_enwin5.0下载:win_x64_cn ... [详细]
  • 稀松数组
    稀松数组1.稀松数组什么?在一个数组中,若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该数组为稀疏数组;如图,一个5*5的数组arr上只有3个有效数值 ... [详细]
  • 示例代码:12345678910111213141ProcessEngineprocessEngineConfiguration.getProcessEngine();2Tas ... [详细]
  • SoL:裸的次小生成树。。。推荐:KuangBin巨巨的博客模版+详解   http:www.cnblogs.comkuangbinp3147329.html# ... [详细]
  • PICT初探索
    pict用于测试用例的生成,非常高效。也非常方便。安装完成后主要程序就一个exe文件。需要通过cmd命令行进入pict文件夹。建立测试用例文件然后使用简单的命令行生成测试用例也可以 ... [详细]
  • HDNoip201505宽宽的笔记难度级别:B;运行时间限制:1000ms;运行空间限制:51200KB;代码长度限制:2000000B试题描述宽宽是一个很萌很萌的爱记笔记的好孩子 ... [详细]
author-avatar
pfshi
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有