网友通过本文主要向大家介绍了android viewpager,android中viewpager,android 仿viewpager,android实现viewpager,android tv viewpager等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
Android之ViewPager 第一课,androidviewpager
想要了解Android新版本的的新特性,从头开始吧,这是Android3.0新加入的widget,以前也接触过,但是没有好好的研究过,今天写了一个小程序,研究一下ViewPager。
这个程序是支持左右滑动的View,核心是ViewPager。讲解都在注释中进行。
代码如下:
MainActivity.java:
package com.android3; import android.annotation.SuppressLint; import android.content.Intent; import android.graphics.BitmapFactory; import android.graphics.Matrix; import android.os.Bundle; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.util.DisplayMetrics; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.animation.Animation; import android.view.animation.TranslateAnimation; import android.widget.Button; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity implements View.OnClickListener, ViewPager.OnPageChangeListener { private ViewPager viewPager; private ArrayList<View> viewList; private List<String> titleList; private MyPagerAdapter adapter; private ImageView cursor; private LinearLayout titleBar; private float cursorW= 0; private float offset = 0; private float currentIndex = 0; private float screenW = 0; private float currentX = 0; private float fScreenW; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initToolbar(); initViewPager(); } /** * ViewPager 保证 缓存中存在三个视图,即 左边 右边 和中间 隔一个的灰被destroy, */ @SuppressLint("InflateParams") private void initViewPager() { viewPager = (ViewPager) findViewById(R.id.viewpager); titleBar = (LinearLayout) findViewById(R.id.titleBar); LayoutInflater inflater = getLayoutInflater(); //创建四个View View view1 = inflater.inflate(R.layout.viewpage_01, null); View view2 = inflater.inflate(R.layout.viewpage_02, null); View view3 = inflater.inflate(R.layout.viewpage_03, null); View view4 = inflater.inflate(R.layout.viewpage_04, null); viewList = new ArrayList<>();// 将要分页显示的View装入数组中 viewList.add(view1); viewList.add(view2); viewList.add(view3); viewList.add(view4); adapter = new MyPagerAdapter(viewList); titleList = new ArrayList<>(); titleList.add("第一页面"); titleList.add("第二页面"); titleList.add("第三页面"); titleList.add("第四页面"); for (int i = 0; i < titleList.size(); i++) { TextView textView = new TextView(this); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); params.weight = 1; params.setMargins(5, 3, 5, 3); textView.setLayoutParams(params); textView.setText(titleList.get(i)); textView.setTextSize(15); textView.setGravity(Gravity.CENTER); titleBar.addView(textView); } initCursorPos(); //初始化指示器位置 viewPager.setAdapter(adapter);//绑定适配器 viewPager.addOnPageChangeListener(this); //注 : setOnPageChangeListener 过时 } /** * 单位px */ public void initCursorPos() { // 初始化动画 cursor = (ImageView) findViewById(R.id.cursor); cursorW= BitmapFactory.decodeResource(getResources(), R.mipmap.cursor).getWidth();// 获取图片宽度 DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); screenW = dm.widthPixels;// 获取分辨率宽度 fScreenW=screenW / viewList.size(); offset = (fScreenW - cursorW) / 2;// 计算偏移量 Matrix matrix = new Matrix(); matrix.postTranslate(offset, 0); cursor.setImageMatrix(matrix);// 设置动画初始位置 ###原始位置 currentX = offset; } private void initToolbar() { Toolbar mToolbar = (Toolbar) findViewById(R.id.toolbar); Button btnRight = (Button) mToolbar.findViewById(R.id.btnRight); mToolbar.setTitle(""); mToolbar.setNavigationIcon(R.mipmap.back); setSupportActionBar(mToolbar); mToolbar.setNavigationOnClickListener(this); btnRight.setOnClickListener(this); } @Override public void onClick(View view) { switch (view.getId()) { case -1: finish(); break; case R.id.btnRight: Intent intent = new Intent(MainActivity.this, SecondActivity.class); startActivity(intent); break; } } @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { float X=fScreenW*position; //在此页面中,滑块位置和原始位置的距离