智慧北京小项目的学习笔记(day0test)
版权声明:本文为博主原创文章,转载请注明出处。若有错误地方,还望批评指正,不胜感激。
摘要
- 一般的程序步骤和人员分配
- Splash闪屏处理
- ViewPage引导页的制作
目录
一般的程序步骤和人员分配
Splash闪屏处理
常用动画来做闪屏页面,常用的动画有RotatAnimation旋转动画、ScaleAnimation缩放动画、AlphaAnimation淡入淡出等。
用setDuration()设置动画时间,用setFillAfter()等方法设置动画的各种属性,然后用startAnimation()方法实现动画,在Splash闪屏中长用于加载数据检查更新等等操作。
用动画集合AnimationSet将各种动画添加到集合中,将各种动画效果一起添加。
用OnAnimationListeren()方法监听动画的结束开始等状态。
ViewPage引导页的制作
ViewPage在V4包下,在布局文件中使用的时候要用全路径,常用ViewPage做引导页面(比较简单),主要用ViewPager的setAdatper()方法向ViewPger中添加View
主要 代码
MainActivity:
package com.qixiaoyi.administrator.zhihuibeijin;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu;
import com.jeremyfeinstein.slidingmenu.lib.app.SlidingFragmentActivity;
import com.qixiaoyi.administrator.zhihuibeijin.fragment.Lift_menu;
import com.qixiaoyi.administrator.zhihuibeijin.fragment.Main_menu;
//public class MainActivity extends AppCompatActivity {
//
// @Override
// protected void onCreate(Bundle savedInstanceState) {
// super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_main);
// }
//}
public class MainActivity extends SlidingFragmentActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setBehindContentView(R.layout.lift_menu);
SlidingMenu sm = getSlidingMenu();
sm.setTouchModeBehind(SlidingMenu.LEFT);
sm.setBehindOffset(300);
sm.setMode(SlidingMenu.LEFT);
FragmentManager supportFragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = supportFragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.lift_menu,new Lift_menu());
fragmentTransaction.replace(R.id.main_ac,new Main_menu());
fragmentTransaction.commit();
}
}
manactivity.xml:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/main_ac"
tools:context="com.qixiaoyi.administrator.zhihuibeijin.MainActivity">
</FrameLayout>
lift_Activity:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ff0000"
android:id="@+id/lift_menu"
tools:context="com.qixiaoyi.administrator.zhihuibeijin.MainActivity">
</FrameLayout>
SplashActivity:
package com.qixiaoyi.administrator.zhihuibeijin;
import android.animation.StateListAnimator;
import android.content.Intent;
import android.content.SharedPreferences;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.AnimationSet;
import android.view.animation.RotateAnimation;
import android.view.animation.ScaleAnimation;
import android.widget.RelativeLayout;
import com.qixiaoyi.administrator.zhihuibeijin.Utils.perfUtils;
public class SplashActivity extends AppCompatActivity {
RelativeLayout rlRoot;
private boolean is_user_guide_show;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
rlRoot = (RelativeLayout) findViewById(R.id.rlRoot);
AnimationSet animationSet = new AnimationSet(false);
//动画
RotateAnimation rotateAnimation = new RotateAnimation(0,360, Animation.RELATIVE_TO_SELF,0.5f);
rotateAnimation.setDuration(2000);
rotateAnimation.setFillAfter(true);
//缩放动画
ScaleAnimation scaleAnimation = new ScaleAnimation(0.5f,1f,0.5f,1f);
scaleAnimation.setDuration(2000);
scaleAnimation.setFillAfter(true);
//淡入淡出
AlphaAnimation alphaAnimation = new AlphaAnimation(0,1f);
alphaAnimation.setDuration(2000);
alphaAnimation.setFillAfter(true);
animationSet.addAnimation(scaleAnimation);
animationSet.addAnimation(rotateAnimation);
animationSet.addAnimation(alphaAnimation);
rlRoot.startAnimation(animationSet);
animationSet.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
//当动画完成的时候调用
@Override
public void onAnimationEnd(Animation animation) {
jumpNextActivity();
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
}
public void jumpNextActivity(){
is_user_guide_show = perfUtils.getBoolean(SplashActivity.this,"is_user_guide_show",false);
if (!is_user_guide_show){
startActivity(new Intent(SplashActivity.this,GuideActivity.class));
}else {
startActivity(new Intent(SplashActivity.this,MainActivity.class));
}
finish();
}
}
splash.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/rlRoot"
android:background="@drawable/splash_bg_newyear"
tools:context="com.qixiaoyi.administrator.zhihuibeijin.SplashActivity">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/img"
android:src="@drawable/splash_horse_newyear"/>
</RelativeLayout>
GuideActivity:
package com.qixiaoyi.administrator.zhihuibeijin;
import android.annotation.TargetApi;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Build;
import android.provider.Settings;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import android.view.Window;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import com.qixiaoyi.administrator.zhihuibeijin.Utils.perfUtils;
import java.util.ArrayList;
public class GuideActivity extends AppCompatActivity {
ViewPager vpGuide;
ArrayList<ImageView> mImageview;
int []imageviewId;
LinearLayout ll_pointgroup;
private int juli;
View view_point;
Button start;
@Override
protected void onCreate(Bundle savedInstanceState) {
imageviewId = new int[]{R.drawable.guide_1,R.drawable.guide_2,R.drawable.guide_3};
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_guide);
vpGuide = (ViewPager) findViewById(R.id.vpGuide);
ll_pointgroup = (LinearLayout) findViewById(R.id.ll_pointgroup);
view_point = findViewById(R.id.view_point);
start = (Button) findViewById(R.id.start);
start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(GuideActivity.this,MainActivity.class));
perfUtils.setBoolean(GuideActivity.this,"is_user_guide_show",true);
finish();
}
});
initView();
// ViewPager设置适配器
vpGuide.setAdapter(new myAdapter());
vpGuide.addOnPageChangeListener(new myPageChangelisteren());
}
private void initView() {
mImageview = new ArrayList<ImageView>();
for (int i = 0;i < imageviewId.length;i++){
ImageView imageView = new ImageView(GuideActivity.this);
imageView.setBackgroundResource(imageviewId[i]);
mImageview.add(imageView);
View view = new View(this);
//设置布局
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(15, 15);
view.setLayoutParams(layoutParams);
if (i>0){
layoutParams.setMargins(30,0,0,0);
}
view.setBackgroundResource(R.drawable.point_shape);
ll_pointgroup.addView(view);
}
//获取View树 监听layout方法完成vie完成
ll_pointgroup.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
@Override
public void onGlobalLayout() { //视图在create()方法中还没完全创建出来
//需要 侧量cre 布局layout 和 画 drawable 三个阶段
//获取View树 用SDK的tool中的Hierawer工具看工程的层级结构
ll_pointgroup.getViewTreeObserver().removeOnGlobalLayoutListener(this);
juli = ll_pointgroup.getChildAt(1).getLeft() - ll_pointgroup.getChildAt(0).getLeft();
Log.i("main", "onGlobalLayout: 距离"+ juli);
}
});
}
private class myAdapter extends PagerAdapter {
@Override
public int getCount() {
return imageviewId.length;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
container.addView(mImageview.get(position));
return mImageview.get(position); //返回的是View
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object); //销毁View既上面返回的
}
}
private class myPageChangelisteren implements ViewPager.OnPageChangeListener {
//滑动状态改变监听 当前位置 移动百分比 移动距离
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
int v = (int) (juli * positionOffset + position * juli);
RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams)
view_point.getLayoutParams();
layoutParams.setMargins(v,0,0,0);
view_point.setLayoutParams(layoutParams);
}
//页面变化监听
@Override
public void onPageSelected(int position) {
if (position == imageviewId.length-1){
start.setVisibility(View.VISIBLE);
}else {
start.setVisibility(View.INVISIBLE);
}
}
//滑动状态变化监听
@Override
public void onPageScrollStateChanged(int state) {
}
}
}
Guide.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.qixiaoyi.administrator.zhihuibeijin.GuideActivity">
<android.support.v4.view.ViewPager
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/vpGuide">
</android.support.v4.view.ViewPager>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="开始"
android:background="@drawable/guide_bt_selector"
android:id="@+id/start"
android:visibility="invisible"
android:textColor="@drawable/guide_text_selector"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="75dp" />
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="47dp">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:id="@+id/ll_pointgroup"
>
</LinearLayout>
<View
android:layout_width="10dp"
android:layout_height="10dp"
android:id="@+id/view_point"
android:background="@drawable/redpoint_shape">
</View>
</RelativeLayout>
</RelativeLayout>
fragment:
liftfragment.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.qixiaoyi.administrator.zhihuibeijin.MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="这是左边的fragment"
/>
</RelativeLayout>
mainfragment:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.qixiaoyi.administrator.zhihuibeijin.MainActivity">
<android.support.v4.view.ViewPager
android:layout_width="match_parent"
android:layout_height="530dp">
</android.support.v4.view.ViewPager>
<RadioGroup
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:background="@drawable/bottom_tab_bg">
<RadioButton
style="@style/tabel_rb"
android:id="@+id/home"
android:text="首页"
/>
</RadioGroup>
</LinearLayout>