欢迎使用CSDN-markdown编辑器

动画旋转事件的各个api以及参数
/**
* 旋转一个View
* @param view
* @param fromDegrees 从哪个角度开始旋转
* @param toDegrees 旋转到哪个角度
*/
private static void rotateView(View view, float fromDegrees, float toDegrees, long startOffset) {
int pivotXType = RotateAnimation.RELATIVE_TO_SELF; // 指定旋转点的x参照物
int pivotYType = RotateAnimation.RELATIVE_TO_SELF; // 指定旋转点的y参照物
float pivotXValue = 0.5f;// 指定旋转点的x的位置
float pivotYValue = 1.0f;// 指定旋转点的y的位置
RotateAnimation ra = new RotateAnimation(fromDegrees, toDegrees, pivotXType, pivotXValue, pivotYType, pivotYValue);
ra.setDuration(500); // 指定动画运行需要的时间
ra.setFillAfter(true); // 让动画停留在结束位置
ra.setStartOffset(startOffset); // 设置动画延迟启动的时间
ra.setAnimationListener(listener); // 设置动画的监听器
view.startAnimation(ra);
}

动画监听:代码如下,但是在主界面的业务逻辑还需要自己好好思考
/* 动画的监听器 /
static AnimationListener listener = new AnimationListener() {

    @Override
    public void onAnimationStart(Animation animation) {
        startCount++;
    }

    @Override
    public void onAnimationRepeat(Animation animation) {

    }

    @Override
    public void onAnimationEnd(Animation animation) {
        startCount--;
    }
};

新型的适配器需要重新再敲一遍吧:继承的是pageadapter
public class BannerAdapter extends PagerAdapter {

private int[] imageResIds;

public BannerAdapter(int[] imageResIds) {
    this.imageResIds = imageResIds;
}

/** 返回有多少页 */
@Override
public int getCount() {
    return imageResIds.length * 10000 * 100;    // 返回一个这么大的值是为了实现无限循环
}

/** 用于判断ViewPager是否可以复用 */
@Override
public boolean isViewFromObject(View view, Object object) {
    return view == object;  // 固定写法
}

/**
 * 跟ListView中的Adpater中的getView方法类似,用于创建一个Item
 * @param container ViewPager
 * @param position 要生成item的位置
 */
@Override
public Object instantiateItem(ViewGroup container, int position) {
    ImageView imageView = new ImageView(container.getContext());
    position = position % imageResIds.length;
    imageView.setBackgroundResource(imageResIds[position]);
    container.addView(imageView);   // 把一个item添加到ViewPager容器
    return imageView;
}

/**
 * 销毁一个Item
 * @param container ViewPager
 * @param position 要销毁item的位置
 * @param object instantiateItem方法的返回值
 */
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
    container.removeView((ImageView) object);
}

Dp2px,密度转化的轮子+0.5f是为了四舍五入
/**
* 把一个dp的值转换为px值
* @param dp
* @return
*/
public int dp2px(int dp) {
float density = getResources().getDisplayMetrics().density; // 获取手机屏幕的密度
return (int) (dp * density + 0.5f); // 加0.5是为了四舍五入
}

用代码写布局文件草
有一步延时操作:
handler.sendEmptyMessageDelayed(SHOW_NEXT_PAGE, 3000); // 3秒钟后显示下一页
private Handler handler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case SHOW_NEXT_PAGE:
showNextPage();
break;
}
}
};

你可能感兴趣的:(安卓基础)