Android開発の案内ページの簡単な実現
9165 ワード
一、実現の構想
ウェルカムページのロードが完了した場合(一般的にはアニメーション)、すなわちウェルカムページのアニメーションのロードが完了した場合、ローカルストレージからレコードが最初に入ったかどうかを取り出し、ブートページまたはホームページに入り、最初に入った場合はブートページに入り、そうでなければホームページに入ります.
ブートページレイアウト使用:viewPager実装では、必要に応じて「体験開始」、「スキップ」ボタンなどを追加できます.レイアウトの下の位置はimgaeを使用してdrawableのshapeをovalに設定できます.ブートページのインジケータポイントとして、ページの数に応じて動的に追加できます.もちろん、必要に応じてブートページの自由スクロールも実現できます.
二、以下はページレイアウトです.
四、ウェルカムページコード:
五、案内ページコード:
はい、今日の分かち合いはここまでで、みんなはどんな問題があって、私と交流することを歓迎します.
ウェルカムページのロードが完了した場合(一般的にはアニメーション)、すなわちウェルカムページのアニメーションのロードが完了した場合、ローカルストレージからレコードが最初に入ったかどうかを取り出し、ブートページまたはホームページに入り、最初に入った場合はブートページに入り、そうでなければホームページに入ります.
ブートページレイアウト使用:viewPager実装では、必要に応じて「体験開始」、「スキップ」ボタンなどを追加できます.レイアウトの下の位置はimgaeを使用してdrawableのshapeをovalに設定できます.ブートページのインジケータポイントとして、ページの数に応じて動的に追加できます.もちろん、必要に応じてブートページの自由スクロールも実現できます.
二、以下はページレイアウトです.
三、引导页面指示点的shape:
四、ウェルカムページコード:
//
@Override
public void onAnimationEnd(Animation animation) {
// --
boolean startMain = CacheUtils.getBoolean(WelcomeActivity.this, GuideActivity.START_MAIN);
if (startMain) {
startActivity(new Intent(WelcomeActivity.this, MainActivity.class));
} else {
startActivity(new Intent(WelcomeActivity.this, GuideActivity.class));
}
finish();
}
五、案内ページコード:
package com.atguigu.beijingnews.activity;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import com.atguigu.beijingnews.MainActivity;
import com.atguigu.beijingnews.R;
import com.atguigu.beijingnews.utils.CacheUtils;
import com.atguigu.beijingnews.utils.DensityUtil;
import com.atguigu.beijingnews.utils.LogUtil;
import java.util.ArrayList;
public class GuideActivity extends Activity {
public static final String START_MAIN = "start_main";
private ViewPager viewpager;
private LinearLayout ll_point_group;
private ImageView iv_red_point;
private Button btn_start_main;
private ArrayList imageViews;
/**
*
*/
private int leftMarg;
private int widthDpi;
/**
* -->
*/
private int ids[] = new int[]{
R.drawable.guide_1, R.drawable.guide_2, R.drawable.guide_3
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_guide);
viewpager = (ViewPager) findViewById(R.id.viewpager);
ll_point_group = (LinearLayout) findViewById(R.id.ll_point_group);
iv_red_point = (ImageView) findViewById(R.id.iv_red_point);
btn_start_main = (Button) findViewById(R.id.btn_start_main);
initData();
}
/**
*
*/
private void initData() {
widthDpi = DensityUtil.dip2px(this, 10);
LogUtil.e(widthDpi + "-----------------");
imageViews = new ArrayList<>();
for (int i = 0; i < ids.length; i++) {
ImageView imageView = new ImageView(this);
imageView.setBackgroundResource(ids[i]);
//
imageViews.add(imageView);
//
ImageView point = new ImageView(this);
point.setImageResource(R.drawable.point_gray);
//
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(widthDpi, widthDpi);
if (i != 0) {
//
params.leftMargin = widthDpi;
}
point.setLayoutParams(params);
ll_point_group.addView(point);
}
//
viewpager.setAdapter(new MyPagerAdapter());
/**
*
* --> (measure--onMeasure)--> layout-->onLayout-->draw-->onDraw
*/
iv_red_point.getViewTreeObserver().addOnGlobalLayoutListener(new MyOnGlobalLayoutListener());
// viewPager
viewpager.addOnPageChangeListener(new MyOnPageChangeListener());
//
btn_start_main.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//
CacheUtils.putBoolean(GuideActivity.this, START_MAIN, true);
//
startActivity(new Intent(GuideActivity.this, MainActivity.class));
finish();//
}
});
}
class MyOnPageChangeListener implements ViewPager.OnPageChangeListener {
/**
* @param position
* @param positionOffset
* @param positionOffsetPixels
*/
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
// = ViewPager *
// float leftMargin = positionOffset * leftMarg;
// = + ;
float leftMargin = (position + positionOffset) * leftMarg;
RelativeLayout.LayoutParams paramgs = (RelativeLayout.LayoutParams) iv_red_point.getLayoutParams();
//
paramgs.leftMargin = (int) leftMargin;
iv_red_point.setLayoutParams(paramgs);
LogUtil.e("position==" + position + ",positionOffset==" + positionOffset + ",positionOffsetPixels==" + positionOffsetPixels);
}
@Override
public void onPageSelected(int position) {
if (position == imageViews.size() - 1) {//
//
btn_start_main.setVisibility(View.VISIBLE);
} else {
//
btn_start_main.setVisibility(View.GONE);
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
}
class MyOnGlobalLayoutListener implements ViewTreeObserver.OnGlobalLayoutListener {
@Override
public void onGlobalLayout() {
iv_red_point.getViewTreeObserver().removeGlobalOnLayoutListener(this);
// = - 0
leftMarg = ll_point_group.getChildAt(1).getLeft() - ll_point_group.getChildAt(0).getLeft();
}
}
class MyPagerAdapter extends PagerAdapter {
@Override
public int getCount() {
return imageViews.size();
}
/**
* @param container viewPager
* @param position
* @return
*/
@Override
public Object instantiateItem(ViewGroup container, int position) {
ImageView imageView = imageViews.get(position);
container.addView(imageView);
return imageView;
}
/**
* @param view
* @param object
* @return
*/
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
}
}
はい、今日の分かち合いはここまでで、みんなはどんな問題があって、私と交流することを歓迎します.