学习心得(一)

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();
}

}
“`

你可能感兴趣的:(黑马智慧北京学习心得)