day01
Splash界面
让一个布局播放一个动画。
动画–>animation 布局配置和代码配置
布局配置:res目录下创建anim文件夹, 多个动画一起播用将动画包起来。
pivotX属性表示当前动画的锚点,%表示相对于自己。相对于自己一定要用到%,比如50%就是自己的中心,100%自己的最大值,0自己的起始值。属性是动画播完后保持播完后的样子。
将这个布局文件通过AnimationUtils.load读入到代码中,最终让一个控件startAnimation就可以了。
// Animation animation = AnimationUtils.loadAnimation(this,
// R.anim.splash_anim);
// iv.startAnimation(animation);
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false">
<alpha android:duration="3000" android:fillAfter="true" android:fromAlpha="0" android:toAlpha="1" />
<rotate android:duration="1000" android:fillAfter="true" android:fromDegrees="0" android:pivotX="50%" android:pivotY="50%" android:toDegrees="360" />
<scale android:duration="1000" android:fillAfter="true" android:fromXScale="0" android:fromYScale="0" android:pivotX="50%" android:pivotY="50%" android:toXScale="1" android:toYScale="1" />
</set>`
代码配置:AnimationSet(true or false),false表示不共享插值器。插值器有重力,线性等等。ScaleAnimation(可以相对自己的构造)Animation.RELATIVE_TO_SELF,0.5f表示自己的中心。animationSet.addAnimation()将一起播放的动画播放起来。
animationSet.setAnimationListener()当这个动画播放时候的接口监听。当动画播完时,进入主页面。
AnimationSet animationSet = new AnimationSet(false);
ScaleAnimation scaleAnimation = new ScaleAnimation(0, 1, 0, 1, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
scaleAnimation.setDuration(1000);
scaleAnimation.setFillAfter(true);
RotateAnimation rotateAnimation = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
rotateAnimation.setDuration(1000);
rotateAnimation.setFillAfter(true);
AlphaAnimation alphaAnimation = new AlphaAnimation(0, 1);
alphaAnimation.setDuration(3000);
alphaAnimation.setFillAfter(true);
animationSet.addAnimation(scaleAnimation);
animationSet.addAnimation(rotateAnimation);
animationSet.addAnimation(alphaAnimation);
iv.startAnimation(animationSet);
animationSet.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationRepeat(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
goNext();
}
});
Guide界面
ViewPager滑动三张图片。
ViewPager一般需要一个List<>集合来填充数据。滑动图片泛型即<ImageView>
主页面有三个点,三个点下面有个红点,红点压着第一个点,可以用相对布局。
`<RelativeLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:layout_marginBottom="20dp" >
<LinearLayout android:id="@+id/guide_ll" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" >
</LinearLayout>
<ImageView android:id="@+id/guide_iv" android:layout_width="8dp" android:layout_height="8dp" android:src="@drawable/guide_red_dot" />
</RelativeLayout>`
由于这些点是动态生成的,可以放到线性布局中动态addView();生成三个点后,设置每个点的左边距。
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
RelativeLayout.LayoutParams layoutParams = (android.widget.RelativeLayout.LayoutParams) imageView
.getLayoutParams();
layoutParams.leftMargin = (int) (arg1 * width + arg0 * width);
imageView.setLayoutParams(layoutParams);
}
红点的滑动距离为getLeft(),此方法是距离这个控件左边距离。最终将这个距离设置给红点的layoutParams。当然这些点用代码生成的,当布局文件已经加载时,他们的宽高是拿不到的,所以可以给整个线性布局设置监听事件。
linearLayout.getViewTreeObserver().addOnGlobalLayoutListener(
new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
width = linearLayout.getChildAt(1).getLeft()
- linearLayout.getChildAt(0).getLeft();
linearLayout.getViewTreeObserver()
.removeGlobalOnLayoutListener(this);
}
});
最后一个界面的Button淡入动画,当有动画时,button无法设置GONE之类的,需要button.clearAnimation();
SlidingMenu的使用
public class MainActivity extends SlidingFragmentActivity {
private SlidingMenu slidingMenu;
private FragmentManager manager;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setBehindContentView(R.layout.activity_menu);
slidingMenu = getSlidingMenu();
slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_NONE);// 设置全屏触摸
slidingMenu.setBehindOffset(DipPxUtils.dip2px(this, 200));// 设置预留屏幕的宽度
initFragment();
}
private void initFragment() {
manager = getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(R.id.main, new HomeFragment(), "HomeFragment");
transaction.replace(R.id.menu, new MenuFragment(), "MenuFragment");
transaction.commit();
}
}
“`