一:开启另一个activity,另一个activity销毁时返回数据
步骤:
1. 开启activity并且获取返回值startActivityForResult(intent, 0);(请求码,可定义)
二:handler使用
Message msg =Message.obtain(); //从全局池中返回一个message实例,避免多次创建message(如new Message)
msg.obj = data;
msg.what=1; //标志消息的标志
handler.sendMessage(msg);
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) { //判断标志位
case 1:
/**
获取数据,更新UI
*/
break;
}
}
};
三:帧动画和activity跳转动画
1帧动画
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="true">
<item android:drawable="@drawable/image1" android:duration="500" />
<item android:drawable="@drawable/image2" android:duration="500" />
<item android:drawable="@drawable/image3" android:duration="500" />
animation-list>
mView.setBackgroundResource(R.drawable.frame);
AnimationDrawable mAnimationDrawable = (AnimationDrawable) mView.getBackground();
mAnimationDrawable.start();
2activity跳转动画
Intent mIntent = new Intent(this, TestActivity.class);
startActivity(mIntent);
overridePendingTransition(R.anim.enter_anim, R.anim.exit_anim);
@Override
public void finish() {
super.finish();
overridePendingTransition(R.anim.enter_anim, R.anim.exit_anim);
}
PS:一定要在startActivity或者finishd的后面调用
四:view动画与属性动画
1.区别
Android3.0之前提供的补间动画机制还算相对比较健全的,比如你的需求中只需要对View进行移动、缩放、旋转和淡入淡出的操作,那么补间动画已经足够健全了。但是,如果一旦需求超出了这四种操作,补间动画就无能为力了。
例如,我们需要改变View的宽度,这个时候就不能通过补间动画实现。此外,补间动画还有一个最大的缺陷,就是它只是改变了View的显示效果而已,并不会真正的改变View的属性。具体来说,例如屏幕左上角有一个Button,使用补间动画将其移动到右下角,此刻你去点击右下角的Button,它是绝对不会响应点击事件的,因此其作用区域依然还在左上角。只不过是补间动画将其绘制在右下角而已
视图动画的基类是Animation
,而属性动画的基类是Animator
4.点击问题
View动画新位置无法触发点击事件,属性动画旧位置无法触发点击事件。
2.View动画(视图动画)
动画可以写在xml中,也可以java代码中动态new出animation。
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:shareInterpolator="true"
android:fillAfter="true">
<translate
android:duration="100"
android:fromXDelta="0.0f"
android:fromYDelta="0.0f"
android:toXDelta="100.0f"
android:toYDelta="100.0f" />
<scale
android:fromXScale="0.0f"
android:fromYScale="0.0f"
android:pivotX="0.0f"
android:pivotY="0.0f"
android:toXScale="1.0f"
android:toYScale="1.0f" />
<rotate
android:fromDegrees="0.0f"
android:pivotX="0.0f"
android:pivotY="0.0f"
android:toDegrees="30.0f" />
<alpha
android:fromAlpha="0.0f"
android:toAlpha="1.0f" />
set>
java代码中使用view动画(使用上面的xml动画)
View mView = findViewById(R.id.mView);
Animation mAnimation = AnimationUtils.loadAnimation(this,R.anim.slide_bottom_in);
mView.startAnimation(mAnimation);
java代码设置并使用view动画(使用java new出来的动画)
AlphaAnimation mAlphaAnimation = new AlphaAnimation(0 , 1);
mAlphaAnimation.setDuration(300);
mView.startAnimation(mAlphaAnimation);
mAlphaAnimation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
//动画开始
}
@Override
public void onAnimationEnd(Animation animation) {
//动画结束
}
@Override
public void onAnimationRepeat(Animation animation) {
//动画重新运行
}
});
3属性动画
###位移:
* 第一个参数target指定要显示动画的组件
* 第二个参数propertyName指定要改变组件的哪个属性
* 第三个参数values是可变参数,就是赋予属性的新的值
* 传入0,代表x起始坐标:当前x + 0
* 传入100,代表x终点坐标:当前x + 100
//具有get、set方法的成员变量就称为属性
ObjectAnimator oa = ObjectAnimator.ofFloat(bt, "translationX", 0, 100) ;
###缩放:
* 第三个参数指定缩放的比例
* 0.1是从原本高度的十分之一开始
* 2是到原本高度的2倍结束
ObjectAnimator oa = ObjectAnimator.ofFloat(bt, "scaleY", 0.1f, 2);
###透明:
* 透明度,0是完全透明,1是完全不透明
ObjectAnimator oa = ObjectAnimator.ofFloat(bt, "alpha", 0.1f, 1);
###旋转
* rotation指定是顺时针旋转
* 20是起始角度
* 270是结束角度
ObjectAnimator oa = ObjectAnimator.ofFloat(bt, "rotation", 20, 270);
* 属性指定为rotationX是竖直翻转
* 属性指定为rotationY是水平翻转
ObjectAnimator oa = ObjectAnimator.ofFloat(bt, "rotationY", 20, 180);
###可变参数
* 第三个参数可变参数可以传入多个参数,可以实现往回位移(旋转、缩放、透明)
ObjectAnimator oa = ObjectAnimator.ofFloat(bt, "translationX", 0, 70, 30, 100) ;
###所有动画一起飞
//创建动画师集合
AnimatorSet set = new AnimatorSet();
//设置要播放动画的组件
set.setTarget(bt);
//所有动画有先后顺序的播放
//set.playSequentially(oa, oa2, oa3, oa4);
//所有动画一起播放
set.playTogether(oa, oa2, oa3, oa4);
set.start();
五: fragment、popupWindow、dialog、fragmentDialog
1 fragment
2 dialog
六:apk升级代码逻辑
json{"versionName":"2.1.2","description":"这是新版本","下载地址":"这是下载地址"}
1 连网解析json,判断服务器的versionName和本地的versionName是否equal
2 下载apk,存到一个路径下。
3 安装apk