帧动画

帧动画非常easy,我们首先看一下Google官方解释This is a traditional animation in the sense that it is created with a sequence of different images

意思表达的非常明了,一个传统的动画是由一组不同的图片组成的。帧动画,就像GIF图片,通过一系列Drawable依次显示来模拟动画的效果。

创建一帧动画分为一下几步(支持4.0以上):
①在项目project下,创建res/drawable文件夹;

②创建一个以<animation-list>为根元素的xml文件,并在根节点以下,加入一组<item>结点,用来载入图片。

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <animation-list xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:oneshot="false">
  4. <item android:drawable="@drawable/girl_1" android:duration="200" />
  5. <item android:drawable="@drawable/girl_2" android:duration="200" />
  6. <item android:drawable="@drawable/girl_3" android:duration="200" />
  7. <item android:drawable="@drawable/girl_4" android:duration="200" />
  8. <item android:drawable="@drawable/girl_5" android:duration="200" />
  9. <item android:drawable="@drawable/girl_6" android:duration="200" />
  10. <item android:drawable="@drawable/girl_7" android:duration="200" />
  11. <item android:drawable="@drawable/girl_8" android:duration="200" />
  12. <item android:drawable="@drawable/girl_9" android:duration="200" />
  13. <item android:drawable="@drawable/girl_10" android:duration="200" />
  14. <item android:drawable="@drawable/girl_11" android:duration="200" />
  15. </animation-list>
③将一组图片放置在res/drawable文件夹下

④在layout布局文件里,加入一个<ImageView> 并在代码中找到,而且设置相关的资源。

  1. // 找到ImageView控件
  2. ImageView iv = (ImageView) findViewById(R.id.iv);
  3. // 为IV设置背景资源
  4. iv.setBackgroundResource(R.drawable.girl);
  5. // 创建帧动画并開始
  6. AnimationDrawable rocketAnimation = (AnimationDrawable) iv.getBackground();
  7. rocketAnimation.start();

补间动画(Tween Animation)

补间动画的名称来源是flash,在做flash动画时,在两个关键帧中间须要做“补间动画”,才干实现图画的运动;插入补间动画后两个关键帧之间的插补帧是由计算机自己主动运算而得到的。

先介绍一些关键的方法:
Animation:

★ setDuration 设置动画的运行时间

★ setRepeatCount 设置动画的反复次数

★ setRepeatMode 指定反复的模式(如:反转)

★ setFillAfter 指示动画指定完毕之后控件的状态是否停留在动画停

止的时候

★ setAnimationListener 设置动画的事件监听器
ImageView:

★ startAnimation(Animation a) 让ImageView运行某动画
补间动画分为(透明、旋转、缩放、位移)等四种:

①透明(Alpha),动画涉及到非常多操作,具体的凝视已经加入到代码中了

  1. // 1.0f代表全然不透明
  2. // 0.0f代表全然透明
  3. float fromAlpha = 1.0f;
  4. float toAlpha = 0.0f;
  5. AlphaAnimation aa = new AlphaAnimation(fromAlpha, toAlpha);
  6. // 动画的配置
  7. aa.setDuration(2 * 1000); // 动画持续多久
  8. aa.setFillAfter(true); // 设为true之后,界面会停留在动画播放完时的界面
  9. aa.setRepeatCount(1); // 设置动画反复的次数
  10. aa.setRepeatMode(Animation.RESTART); // 动画重新启动或逆转,默认值为重新启动动画
  11. // 启动动画
  12. iv.startAnimation(aa);

②旋转(roate),涉及到非常多概念,代码以下也会以图例解释的

  1. // 旋转的起始角度
  2. float fromDegrees = 0;
  3. // 旋转的目标角度
  4. float toDegrees = 360;
  5. // 旋转的X轴中心点类型
  6. // 分为三种类型:Animation.ABSOLUTE, Animation.RELATIVE_TO_SELF,Animation.RELATIVE_TO_PARENT.
  7. // X轴的原点的类型(相对于自己而言还是相对于父容器而言)
  8. int pivotXType = Animation.RELATIVE_TO_SELF;
  9. // 旋转的X轴坐标的值,一般被指定为一个百分比数;1.0代表着100%
  10. // 開始伸缩时的X轴的原点(例:0.5就是指以图片宽度的二分之中的一个的位置作为X轴的原点)
  11. float pivotXValue = 0.0f;
  12. // Y轴的原点的类型
  13. int pivotYType = Animation.RELATIVE_TO_SELF;
  14. // 開始伸缩时的Y轴的原点
  15. float pivotYValue = 0.0f;
  16. /*
  17. *这里对pivotXValue和pivotYValue的值具体说明一下
  18. *在Android中的坐标轴Y轴向下是增张的,X轴向右是增长的;
  19. *pivotXValue在API中被说明为:旋转的X轴坐标的值,一般被指定为一个百分比数;1.0代表着100%
  20. *也就是说,当我们指定为0.0f时,代表作是图片的X轴的0点;当指定为0.5f时,代表图片的width/2的位置;当被指定为1.0f时,代表图片的width位置;
  21. */
  22. RotateAnimation ra = new RotateAnimation(fromDegrees, toDegrees, pivotXType, pivotXValue, pivotYType, pivotYValue);
  23. // 动画的配置
  24. ra.setDuration(2 * 1000); // 动画持续多久
  25. ra.setRepeatCount(1); // 设置动画反复的次数
  26. ra.setStartOffset(2 * 1000); // 设置动画启动时间的偏移量,简单来说就是多长时间后启动动画
  27. // 启动动画
  28. iv.startAnimation(ra);

大家肯定会对pivotXValuepivotYValue非常困惑,pivot是中心点的意思,也就是代表旋转动画X轴的坐标和旋转动画Y轴的坐标,亲,请看图吧。

我认为画的还是挺清晰的。

③缩放(scale)

  1. // 0.0f代表0点的位置;0.5f代表图片宽度的一半的位置;1.0f代表图片整个图片宽度的位置;2.0f代表整个图片宽度的2倍;
  2. // 水平方向比例尺的起始值
  3. float fromX = 0.0f;
  4. // 水平方向比例尺的终值
  5. float toX = 2.0f;
  6. // 垂直方向比例尺的起始值
  7. float fromY = 0.0f;
  8. // 垂直方向比例尺的终值
  9. float toY = 2.0f;
  10. // X轴的原点的类型(相对于自己而言还是相对于父容器而言)
  11. int pivotXType = Animation.RELATIVE_TO_SELF;
  12. // 開始伸缩时的X轴的原点(例:0.5就是指以图片宽度的二分之中的一个的位置作为X轴的原点)
  13. float pivotXValue = 0.0f;
  14. int pivotYType = Animation.RELATIVE_TO_SELF;
  15. float pivotYValue = 0.0f;
  16. ScaleAnimation sa = new ScaleAnimation(fromX, toX, fromY, toY, pivotXType, pivotXValue, pivotYType, pivotYValue);
  17. sa.setDuration(2 * 1000);
  18. // 整个动画会呈现,从左上角向右下加放大2倍
  19. iv.startAnimation(sa);

图片示比例如以下:

④位移(translate),以下是位移的代码,參数非常多,可是不太好解释,所以还是用图片来说说明

  1. // 位移的x轴起始坐标的类型(相对于自己还是相对父容器)
  2. int fromXType = Animation.RELATIVE_TO_PARENT;
  3. // x轴起点
  4. float fromXValue = -0.5f;
  5. int toXType = Animation.RELATIVE_TO_PARENT;
  6. // X轴的终点
  7. float toXValue = 0.5f;
  8. int fromYType = Animation.RELATIVE_TO_PARENT;
  9. // Y轴的起始坐标
  10. float fromYValue = -0.5f;
  11. int toYType = Animation.RELATIVE_TO_PARENT;
  12. // Y轴的终点坐标
  13. float toYValue = 0.5f;
  14. TranslateAnimation ta = new TranslateAnimation(fromXType, fromXValue, toXType, toXValue, fromYType, fromYValue, toYType, toYValue);
  15. ta.setDuration(2 * 1000);
  16. iv.startAnimation(ta);

位移示意图:

我们能够看到,在位移中,屏幕中央是(0.0f,0.0f),左上角的坐标为(-0.5f,-0.5f),右下角为(0.5f,0.5f);当以上面的代码运行时,图片会从左上角平移到右下角。

⑤动画的集合;顾名思义,即使把很多动画对象,加入到AnimationSet的集合中,然后交给控件运行,运行动画顺序就是动画加入的顺序。代码例如以下:

  1. AnimationSet set = new AnimationSet(false);
  2. ScaleAnimation sa = new ScaleAnimation(0.1f, 2.0f, 0.1f, 2.0f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
  3. sa.setDuration(3000); //设置动画的时间
  4. sa.setRepeatCount(1); //设置动画的显示次数
  5. sa.setRepeatMode(AlphaAnimation.REVERSE);//设置播放模式
  6. RotateAnimation ra = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
  7. ra.setDuration(3000); //设置动画的时间
  8. ra.setRepeatCount(1); //设置动画的显示次数
  9. ra.setRepeatMode(AlphaAnimation.REVERSE);//设置播放模式
  10. TranslateAnimation ta = new TranslateAnimation(Animation.RELATIVE_TO_PARENT, -0.5f, Animation.RELATIVE_TO_PARENT, 0.5f, Animation.RELATIVE_TO_PARENT, -0.5f, Animation.RELATIVE_TO_PARENT, 0.5f);
  11. ta.setDuration(3000); //设置动画的时间
  12. ta.setRepeatCount(1); //设置动画的显示次数
  13. ta.setRepeatMode(AlphaAnimation.REVERSE);//设置播放模式
  14. set.addAnimation(sa);
  15. set.addAnimation(ta);
  16. set.addAnimation(ra);
  17. //播放动画
  18. iv_icon.startAnimation(set);
⑤ 对于补间动画,它仅仅是改变了View对象绘制的位置,而没有改变View对象本身。

对话框以及面试中的注意点

Android中经常使用的对话框有通知对话框、列表对话框、单选对话框、多选对话框以及进度对话框。当中,通知对话框、列表对话框、单选、多选对话框由AlertDialog.Builder创建,进度对话框由ProgressDialog创建。

经常使用的方法:
①setIcon:设置对话框标题栏左側的那个图标
②setTitle:设置对话框标题栏的提示信息
③setMessage:设置对话框主体部分的提示信息
④setPositiveButton:设置确定button
⑤setNegativeButton:设置取消button
⑥setCancelable:设置对话框在点击返回键时是否会关闭
⑦show:显示对话框
getApplicationContext()MainActivity.this的差别:
①对于getApplicationContext(),我们能够从API看到这样一句话Return the context of the single, global Application object of the current process.,意思是:返回当前进程的一个单例的全局应用程序上下文对象,它代表的是Android系统中这个应用本身。
②对于MainActivity.this,代表的是一个具体的Activity对象;当我们在使用对话框时,它须要被绑定在某一个具体的界面上,因此也就不能够使用getApplicationContext()作为Context传入到构造函数中。
③当我们在对话框中传入getApplicationContext()时,会报一个异常:Caused by: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
通知对话框

通知对话框使用Builder创建,一般都会有个确认和取消button。当通知对话框提示的信息是要求用户必须观看且必须做出确定或者取消的选择的时候,须要设置setCancelable属性为false(默认true),以防止用户直接使用返回键关闭对话框。

  1. Builder builder = new Builder(this);
  2. builder.setIcon(R.drawable.ic_launcher);
  3. builder.setTitle("通知");
  4. builder.setMessage("您看到的是通知对话框!");
  5. //设置对话框点击返回键不关闭
  6. builder.setCancelable(false);
  7. //设置确定button的点击事件
  8. builder.setPositiveButton("确定", new OnClickListener() {
  9. @Override
  10. public void onClick(DialogInterface dialog, int which) {
  11. Toast.makeText(MainActivity.this, "您点击了确定button!", 0).show();
  12. }
  13. });
  14. //设置取消button的点击事件
  15. builder.setNegativeButton("取消", new OnClickListener() {
  16. @Override
  17. public void onClick(DialogInterface dialog, int which) {
  18. Toast.makeText(MainActivity.this, "您点击了取消button!", 0).show();
  19. }
  20. });
  21. //将对话框显示出来
  22. builder.show();
列表对话框

列表对话框使用Builder来创建,仅仅需调用Builder对象的setItems方法设置要展示的列表项就可以。

  1. Builder builder = new Builder(this);
  2. builder.setIcon(R.drawable.ic_launcher);
  3. builder.setTitle("请选择要去的城市");
  4. final String[] cities = new String[]{"北京","上海","广州","深圳","杭州"};
  5. builder.setItems(cities, new OnClickListener() {
  6. /*
  7. * 第一个參数代表对话框对象
  8. * 第二个參数是点击对象的索引
  9. */
  10. @Override
  11. public void onClick(DialogInterface dialog, int which) {
  12. String city = cities[which];
  13. Toast.makeText(MainActivity.this, "您选择的是:"+city, 0).show();
  14. }
  15. });
  16. builder.show();
普通对话框

还是比較简单的,涉及到了AlertDialog.Builder和一些方法,请看一下代码和凝视吧。

  1. // 创建一个对话框,并打算在`MainActivity`界面上展示
  2. Builder builder = new AlertDialog.Builder(MainActivity.this);
  3. // 设置标题和内容
  4. builder.setTitle("我是普通对话框标题");
  5. builder.setMessage("我是普通对话框内容");
  6. // 设置确定和取消button
  7. builder.setPositiveButton("我是确定button", new OnClickListener() {
  8. @Override
  9. public void onClick(DialogInterface dialog, int which) {
  10. Toast.makeText(getApplicationContext(), "确定button被点击了", Toast.LENGTH_SHORT).show();
  11. // 隐藏对话框
  12. dialog.dismiss();
  13. }
  14. });
  15. builder.setNegativeButton("我是取消button", new OnClickListener() {
  16. @Override
  17. public void onClick(DialogInterface dialog, int which) {
  18. Toast.makeText(getApplicationContext(), "取消button被点击了", Toast.LENGTH_SHORT).show();
  19. // 隐藏对话框
  20. dialog.dismiss();
  21. }
  22. });
  23. // 显示对话框
  24. builder.show();
单选对话框

也是非常easy,与普通对话框相比,它不能够设置setMessage(),须要使用setSingleItemChoiceItems()方法。

  1. Builder builder = new AlertDialog.Builder(MainActivity.this);
  2. // 设置标题和内容
  3. builder.setTitle("我是普通对话框标题");
  4. // 单选对话框
  5. // 要展示的单选选项列表
  6. final String[] items = { "你是二货", "我是二货", "大家都是二货" };
  7. // 默认选中项的索引
  8. int checkedItem = 0;
  9. // 选中选项触发的点击事件
  10. OnClickListener listener = new OnClickListener() {
  11. @Override
  12. public void onClick(DialogInterface dialog, int which) {
  13. String res = items[which];
  14. Toast.makeText(getApplicationContext(), res, Toast.LENGTH_SHORT).show();
  15. dialog.dismiss();
  16. }
  17. };
  18. builder.setSingleChoiceItems(items, checkedItem, listener);
  19. // 显示对话框
  20. builder.show();
多选对话框

多选对话框使用Builder来创建,仅仅需调用Builder对象的setMultiChoiceItems方法,设置要展示的列表项就可以。

  1. Builder builder = new AlertDialog.Builder(MainActivity.this);
  2. // 设置标题和内容
  3. builder.setTitle("我是多选对话框标题");
  4. // 要展示的多选列表项
  5. final String[] items = { "你是二货", "我是二货", "大家都是二货" };
  6. // 相应每一个列表项的选中状态
  7. final boolean[] checkedItems = { false, false, false };
  8. // 设置点击事件
  9. OnMultiChoiceClickListener listener = new OnMultiChoiceClickListener() {
  10. @Override
  11. public void onClick(DialogInterface dialog, int which, boolean isChecked) {
  12. // 改动被选中的条目
  13. checkedItems[which] = isChecked;
  14. }
  15. };
  16. builder.setMultiChoiceItems(items, checkedItems, listener);
  17. // 设置确定和取消button
  18. builder.setPositiveButton("我是确定button", new OnClickListener() {
  19. @Override
  20. public void onClick(DialogInterface dialog, int which) {
  21. StringBuffer sb = new StringBuffer();
  22. for (int i = 0; i < checkedItems.length; i++) {
  23. if (checkedItems[i]) {
  24. sb.append(items[i] + ",");
  25. }
  26. }
  27. Toast.makeText(getApplicationContext(), sb.toString(), Toast.LENGTH_SHORT).show();
  28. // 隐藏对话框
  29. dialog.dismiss();
  30. }
  31. });
  32. // 显示对话框
  33. builder.show();
进度对话框

进度对话框不同于之前几种对话框,它是由ProgressDialog对象来创建的,而且进度对话框内部使用了消息机制Handler来进行处理,所以它能够直接在子线程中进行改动,无需再单独设置Handler来改动UI。

  1. final ProgressDialog dialog = new ProgressDialog(MainActivity.this);
  2. // 设置图标
  3. dialog.setIcon(R.drawable.ic_launcher);
  4. dialog.setTitle("进度对话框");
  5. dialog.setMessage("玩命载入中...");
  6. // 设置对话框的样式为水平
  7. dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
  8. // 设置进度条的最大值
  9. dialog.setMax(100);
  10. // 显示对话框
  11. dialog.show();
  12. new Thread() {
  13. public void run() {
  14. while (true) {
  15. // 休眠500ms
  16. SystemClock.sleep(500);
  17. // 进度条每次添加一个单位
  18. dialog.incrementProgressBy(1);
  19. // 进度条到头是退出
  20. if (dialog.getMax() == dialog.getProgress()) {
  21. dialog.dismiss();
  22. Toast.makeText(MainActivity.this, "下载完毕!", 0).show();
  23. }
  24. }
  25. };
  26. }.start();
状态栏通知

新版本号API的通知代码

  1. // 通知管理器
  2. NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
  3. Notification noti = new Notification.Builder(this)//
  4. .setContentTitle("通知栏标题")//
  5. .setContentText("通知栏内容")//
  6. .setSmallIcon(R.drawable.ic_launcher)//
  7. .setAutoCancel(true)//
  8. .build();
  9. notificationManager.notify(0, noti);

旧版本号的通知:

  1. // 通知管理器
  2. Notification n = new Notification(R.drawable.feq, "下载完毕", System.currentTimeMillis());
  3. // 创建PendingIntent以供点击时发送,延迟意图,点击时发送
  4. PendingIntent pi = PendingIntent.getActivity(this, 100, new Intent(this, ResultActivity.class), PendingIntent.FLAG_ONE_SHOT);
  5. // 设置通知点击事件
  6. n.setLatestEventInfo(this, "下载完毕", "FeiQ.exe下载完毕", pi);
  7. // 设置通知点击后清除
  8. n.flags = Notification.FLAG_AUTO_CANCEL;
  9. // 获取系统通知服务
  10. NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
  11. // 发送消息
  12. manager.notify(0, n);
自己定义对话框步骤
①创建对话框构建器
②创建出一个空的对话框
③实例化自己定义布局
④给对话框设置自己定义布局
⑤给button设置点击事件
自己定义布局的代码

測试结果是:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="wrap_content"
  5. android:orientation="vertical" >
  6. <EditText
  7. android:layout_width="match_parent"
  8. android:layout_height="wrap_content"
  9. android:hint="请输入账号" />
  10. <EditText
  11. android:layout_width="match_parent"
  12. android:layout_height="wrap_content"
  13. android:hint="请输入password" />
  14. <LinearLayout
  15. android:layout_width="match_parent"
  16. android:layout_height="wrap_content"
  17. android:orientation="horizontal" >
  18. <Button
  19. android:id="@+id/btn_login"
  20. android:layout_width="0dp"
  21. android:layout_height="wrap_content"
  22. android:layout_weight="1"
  23. android:text="登陆" />
  24. <Button
  25. android:id="@+id/btn_cancel"
  26. android:layout_width="0dp"
  27. android:layout_height="wrap_content"
  28. android:layout_weight="1"
  29. android:text="取消" />
  30. </LinearLayout>
  31. </LinearLayout>

创建自己定义对话框的代码是:

  1. // 对话框构建器
  2. Builder builder = new AlertDialog.Builder(this);
  3. // 创建出一个空的对话框
  4. final AlertDialog dialog = builder.create();
  5. // 载入自己定义View布局
  6. View view = View.inflate(this, R.layout.custom_dialog, null);
  7. int viewSpacingLeft = 0;
  8. int viewSpacingTop = 0;
  9. int viewSpacingRight = 0;
  10. int viewSpacingBottom = 0;
  11. // 给对话框指定自己定义的layout文件,而且上下左右边框为0:不然对话框会出现黑框,由于低版本号的对话框,不指定背景的话就是黑色的。
  12. dialog.setView(view, viewSpacingLeft, viewSpacingTop, viewSpacingRight, viewSpacingBottom);
  13. // 找到button,设置点击事件
  14. Button btn_login = (Button) view.findViewById(R.id.btn_login);
  15. Button btn_cancel = (Button) view.findViewById(R.id.btn_cancel);
  16. btn_login.setOnClickListener(new View.OnClickListener() {
  17. @Override
  18. public void onClick(View v) {
  19. Toast.makeText(getApplicationContext(), "确定button被点击了", Toast.LENGTH_SHORT).show();
  20. dialog.dismiss();
  21. }
  22. });
  23. btn_cancel.setOnClickListener(new View.OnClickListener() {
  24. @Override
  25. public void onClick(View v) {
  26. Toast.makeText(getApplicationContext(), "取消button被点击了", Toast.LENGTH_SHORT).show();
  27. dialog.dismiss();
  28. }
  29. });
  30. // 显示对话框
  31. dialog.show();

★★★结合工作和面试★★★

一个对话框弹出,Activity会运行什么生命周期方法?
Activity不会运行不论什么方法
怎样解决Toast反复弹出问题?这个工作中也会碰到这种需求。
在我们做项目时,有时会用到Toast来给用户提示某些信息,可当用户视而不见时,连续反复的操作就会让Toast不停的在页面上显示,非常是影响用户体验。

解决思路:不用计算Toast的时间之类的,就是定义一个全局的成员变量Toast, 这个Toast不为null的时候才去make,否则直接setText.为了按返回键后马上使Toast不再显示,重写父类Activity的 onBackPressed()方法里面去cancel你的Toast就可以.

  1. private Toast mToast;
  2. public void showToast(String text) {
  3. if (mToast == null) {
  4. mToast = Toast.makeText(MainActivity.this, text, Toast.LENGTH_SHORT);
  5. } else {
  6. mToast.setText(text);
  7. mToast.setDuration(Toast.LENGTH_SHORT);
  8. }
  9. mToast.show();
  10. }
  11. public void cancelToast() {
  12. if (mToast != null) {
  13. mToast.cancel();
  14. }
  15. }
  16. public void onBackPressed() {
  17. cancelToast();
  18. super.onBackPressed();
  19. }

Android基础笔记(十)- 帧动画、补间动画具体解释、对话框的更多相关文章

  1. Android笔记(六十四) android中的动画——补间动画(tweened animation)

    补间动画就是只需要定义动画开始和结束的位置,动画中间的变化由系统去补齐. 补间动画由一下四种方式: 1.AplhaAnimation——透明度动画效果 2.ScaleAnimation ——缩放动画效 ...

  2. android 帧动画,补间动画,属性动画的简单总结

      帧动画——FrameAnimation 将一系列图片有序播放,形成动画的效果.其本质是一个Drawable,是一系列图片的集合,本身可以当做一个图片一样使用 在Drawable文件夹下,创建ani ...

  3. 属性动画 补间动画 帧动画 基本使用案例 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  4. Android 动画 属性动画 视图动画 补间动画 帧动画 详解 使用

    Android动画 Property Animation res/animator/filename.xml In Java: R.animator.filename In XML: @[packag ...

  5. Android中的帧动画与补间动画的使用

    前言 在日常开发中,我们有时候须要一些好看的动画效果,这时能够充分利用Android提供的这几种动画来实现. Android提供了3种类型的动画: 补间动画:补间动画能够应用于View,让你能够定义一 ...

  6. android104 帧动画,补间动画,属性动画

    ##帧动画FrameAnimation* 多张图片快速切换,形成动画效果* 帧动画使用xml定义 package com.itheima.frameanimation; import android. ...

  7. android 补间动画

    android开发过程中,为了更好的展示应用程序,应用程序添加动画,能够很好地实现这个功能.如果动画中的图像变化有一定的规律,可以采用自动生成图像的方式来生成动画,例如图像的移动.旋转.缩放等.自动生 ...

  8. TimePicker控件、帧动画、补间动画

    1.TimePicker控件 最近感觉每个开发平台的控件基本都差不多,在Android中控件的事件和.net控件直接写事件有一定的区别,net事件可以直接界面进行事件的绑定哈.不过在Silverlig ...

  9. Android开发实战之补间动画和属性动画

    说起动画,其实一点也不陌生,在使用一款app的时候为了优化用户体验,多多少少的,都会加入动画. 安卓中的动画,分为两大类:补间动画和属性动画.本篇博文会详细介绍总结这两大动画,希望本篇博文对你的学习和 ...

随机推荐

  1. Sphinx/Coreseek 4.1 跑 buildconf.sh 一个错误,无法生成configure档

    安装前 coorseek 什么时候,遇到一些错误.该官方网站无法看到的解决方案,终于 google 在大牛的博客评论区找到一个解决方案.突然跑到他的膝盖介绍~~ 这里整理是为了方便一些人发现,墙毕竟让 ...

  2. C# 抽象类其中创建一个静态方法

    </pre><pre name="code" class="csharp"><span style="font-size ...

  3. Freemarker详细解释

    A概念 最经常使用的概念 1. scalars:存储单值 字符串:简单文本由单或双引號括起来. 数字:直接使用数值. 日期:通常从数据模型获得 布尔值:true或false,通常在<#if -& ...

  4. HOWTO: 为GitHub for Windows指定代理服务器(转)

    If the command line way of configuring your proxy server doesn't work, you can probably just edit .g ...

  5. java通用抹去魔,在边界行动,擦除补偿

    java通用抹去魔 package org.rui.generics.erasure; public class HasF { public void f(){ System.out.println( ...

  6. 自制Https证书并在Spring Boot和Nginx中使用(转)

    白话Https一文中, 介绍了Https存在的目的和工作原理,但多是偏向于原理性的介绍,本文介绍如何一步一步自制一个能够通过浏览器认证的Https证书,并讲解在Spring Boot环境和Nginx环 ...

  7. hdu 1150 Machine Schedule (经典二分匹配)

    //A组n人 B组m人 //最多有多少人匹配 每人仅仅有匹配一次 # include<stdio.h> # include<string.h> # include<alg ...

  8. 微博API怎么爬取其它未授权用户的微博/怎么爬取指定用户公布的微博

    获取某个用户最新发表的微博列表:http://open.weibo.com/wiki/2/statuses/user_timeline 原接口已经被封.很多人都在问怎么获取指定用户的微博,于是写这篇B ...

  9. Java加深理解有关注释

    一.获取应用笔记 常常会遇到这种情况 package Tokyo.Hot; public class Demo { public static void main(String[] args) { n ...

  10. Python 基于学习 网络小爬虫

    <span style="font-size:18px;"># # 百度贴吧图片网络小爬虫 # import re import urllib def getHtml( ...