大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。
先贴效果图(每个开关Tab债券。尾随页变化。效果图蓝条添加的用户体验)
首先看总体效果图的布局文件吧(非常easy,就三部分,各自是Tab栏目、定位蓝条、各个页面(是V4包下的ViewPager))
activity_tab_winter_main.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:umadsdk="http://schemas.android.com/apk/res/com.LoveBus" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#FF969696" android:orientation="vertical" > <LinearLayout android:id="@+id/linearLayout1" android:layout_width="fill_parent" android:layout_height="45.0dip" android:background="#FFDFD7D7" > <TextView android:id="@+id/text1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1.0" android:gravity="center" android:text="\n广告" android:textColor="#000000" /> <TextView android:id="@+id/text2" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1.0" android:gravity="center" android:text="\n选项" android:textColor="#000000" /> <TextView android:id="@+id/text3" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1.0" android:gravity="center" android:text="\n关于作者" android:textColor="#000000" /> </LinearLayout> <ImageView android:id="@+id/cursor" android:layout_width="fill_parent" android:layout_height="wrap_content" android:scaleType="matrix" android:src="@drawable/icon_tab_winter_a" /> <android.support.v4.view.ViewPager android:id="@+id/vPager" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_gravity="center" android:layout_weight="1.0" android:background="#FFDFD7D7" android:flipInterval="30" android:persistentDrawingCache="animation" /></LinearLayout>
接下来贴出每一个页面的布局文件
activity_tab_winter_lay1.xml–activity_tab_winter_lay2.xml—activity_tab_winter_lay3.xml(三个页面是一样的,就是text内容不一样。这样好区分)
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#FFDFD7D7" android:orientation="vertical" > <Button android:id="@+id/btn" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center" android:gravity="center" android:text="广告" /> </LinearLayout>
MainActivity(思路简单,代码有凝视)
package com.example.viewpagerdemo; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.graphics.BitmapFactory; import android.graphics.Matrix; import android.os.Bundle; import android.os.Parcelable; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager.OnPageChangeListener; import android.util.DisplayMetrics; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.animation.Animation; import android.view.animation.TranslateAnimation; import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; public class MainActivity extends Activity { private ViewPager mPager;// 页卡内容 private List<View> listViews; // Tab页面列表 private TextView t1, t2, t3;// 页卡头标 private int currIndex = 0;// 当前页卡编号 private ImageView cursor;// 动绘图片 private int bmpW;// 动绘图片宽度 private int offset = 0;// 动绘图片偏移量 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_tab_winter_main); //初始化三部分 InitImageView(); InitTextView(); InitViewPager(); } /** * 初始化动画 */ private void InitImageView() { //获取空间 cursor = (ImageView) findViewById(R.id.cursor); // 获取图片宽度 bmpW = BitmapFactory.decodeResource(getResources(), R.drawable.icon_tab_winter_a).getWidth(); //得到屏幕宽度 DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); int screenW = dm.widthPixels; // 计算偏移量 offset = (screenW / 3 - bmpW) / 2; Matrix matrix = new Matrix(); matrix.postTranslate(offset, 0); // 设置动画初始位置 cursor.setImageMatrix(matrix); } /** * 初始化头标 */ private void InitTextView() { t1 = (TextView) findViewById(R.id.text1); t2 = (TextView) findViewById(R.id.text2); t3 = (TextView) findViewById(R.id.text3); //加入监听事件 t1.setOnClickListener(new MyOnClickListener(0)); t2.setOnClickListener(new MyOnClickListener(1)); t3.setOnClickListener(new MyOnClickListener(2)); } /** * 初始化ViewPager */ private void InitViewPager() { //viewPager mPager = (ViewPager) findViewById(R.id.vPager); //data listViews = new ArrayList<View>(); LayoutInflater mInflater = getLayoutInflater(); listViews.add(mInflater .inflate(R.layout.activity_tab_winter_lay2, null)); listViews.add(mInflater .inflate(R.layout.activity_tab_winter_lay1, null)); listViews.add(mInflater .inflate(R.layout.activity_tab_winter_lay3, null)); //adapter mPager.setAdapter(new MyPagerAdapter(listViews)); mPager.setCurrentItem(0); //监听事件 mPager.setOnPageChangeListener(new MyOnPageChangeListener()); } /** * ViewPager适配器 */ public class MyPagerAdapter extends PagerAdapter { public List<View> mListViews; public MyPagerAdapter(List<View> mListViews) { this.mListViews = mListViews; } @Override public void destroyItem(View view, int position, Object arg2) { ((ViewPager) view).removeView(mListViews.get(position)); } @Override public void finishUpdate(View arg0) { } @Override public int getCount() { return mListViews.size(); } @Override public Object instantiateItem(ViewGroup container, int position) { container.addView(mListViews.get(position)); return mListViews.get(position); } @Override public boolean isViewFromObject(View arg0, Object arg1) { return arg0 == (arg1); } @Override public void restoreState(Parcelable arg0, ClassLoader arg1) { } @Override public Parcelable saveState() { return null; } @Override public void startUpdate(View arg0) { } } /** * 头标点击监听 */ public class MyOnClickListener implements View.OnClickListener { private int index = 0; public MyOnClickListener(int i) { index = i; } public void onClick(View v) { mPager.setCurrentItem(index); } }; /** * 页卡切换监听 */ public class MyOnPageChangeListener implements OnPageChangeListener { int one = offset * 2 + bmpW;// 页卡1 -> 页卡2 偏移量 int two = one * 2;// 页卡1 -> 页卡3 偏移量 public void onPageSelected(int position) { Animation animation = null; switch (position) { case 0: if (currIndex == 1) { animation = new TranslateAnimation(one, 0, 0, 0); } else if (currIndex == 2) { animation = new TranslateAnimation(two, 0, 0, 0); } break; case 1: if (currIndex == 0) { animation = new TranslateAnimation(offset, one, 0, 0); } else if (currIndex == 2) { animation = new TranslateAnimation(two, one, 0, 0); } break; case 2: if (currIndex == 0) { animation = new TranslateAnimation(offset, two, 0, 0); } else if (currIndex == 1) { animation = new TranslateAnimation(one, two, 0, 0); } break; } currIndex = position; animation.setFillAfter(true); animation.setDuration(300); cursor.startAnimation(animation); } public void onPageScrolled(int arg0, float arg1, int arg2) { } public void onPageScrollStateChanged(int arg0) { } } }
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/117228.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...