ViewPager指示器

用到的知识:
1.Fragment与FragmentPagerAdapter结合使用
2.ViewPager滑动事件
2.drawable资源的使用
3.屏幕宽度的获取
4.Matrix的使用
5.位移动画的使用

package com.xspacing.viewpagerindicator;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.Animation;
import android.view.animation.TranslateAnimation;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

/**
 * 
 * @ClassName MainActivity.java
 * @Description TODO 指示器
 * @author Smile
 * @version v1.0
 * @date 2016年9月27日 下午4:16:30
 */
public class MainActivity extends FragmentActivity implements OnPageChangeListener {

    private static final String TAG = "MainActivity";
    private TextView mTvMusic;
    private TextView mTvMovie;
    private TextView mTvGame;
    private ViewPager mViewPager;
    private ImageView mIvIndicator;
    private int offset;// 指示器初始偏移量
    private int indicatorWidth;// 指示器的宽度
    private int screenWidth; // 屏幕的宽度
    private List<Fragment> mList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initViews();
        initDatas();
    }

    private void initViews() {
        mTvMusic = (TextView) findViewById(R.id.main_tv_title_music);
        mTvMovie = (TextView) findViewById(R.id.main_tv_title_movie);
        mTvGame = (TextView) findViewById(R.id.main_tv_title_game);
        mIvIndicator = (ImageView) findViewById(R.id.main_iv_indicator);
        mViewPager = (ViewPager) findViewById(R.id.main_vp_show);
        mTvMusic.setOnClickListener(new MyOnClickListener(0));
        mTvMovie.setOnClickListener(new MyOnClickListener(1));
        mTvGame.setOnClickListener(new MyOnClickListener(2));
        mList = new ArrayList<Fragment>();
        mList.add(new FragmentMusic());
        mList.add(new FragmentMovie());
        mList.add(new FragmentGame());
        mViewPager.setAdapter(new FragmentAdapter(getSupportFragmentManager(), mList));
        mViewPager.setCurrentItem(0);
        mViewPager.addOnPageChangeListener(this);
    }

    private void initDatas() {
        // 获取指示器图片的宽度
        indicatorWidth = BitmapFactory.decodeResource(getResources(), R.drawable.indicator).getWidth();
        DisplayMetrics dm = new DisplayMetrics(); // 获取屏幕参数对象
        getWindowManager().getDefaultDisplay().getMetrics(dm); // 获取当前手机屏幕宽度
        // 屏幕宽度
        screenWidth = dm.widthPixels;
        // 指示器初始偏移量的计算
        offset = (screenWidth / mList.size() - indicatorWidth) / 2;
        Matrix ma = new Matrix();
        ma.postTranslate(offset, 0);
        //设置指示器偏移
        mIvIndicator.setImageMatrix(ma);
    }

    private class MyOnClickListener implements OnClickListener {

        private int index;

        public MyOnClickListener(int index) {
            this.index = index;
        }

        @Override
        public void onClick(View v) {
            mViewPager.setCurrentItem(index);
        }

    }

    @Override
    public void onPageScrollStateChanged(int position) {
    }

    @Override
    public void onPageScrolled(int position, float off, int arg2) {
        // 创建平移动画
        int one = screenWidth / mList.size();
        //设置动画随着偏移改变而改变
        TranslateAnimation anim = new TranslateAnimation(one * off + one * position, position * one+one * off, 0, 0);
        anim.setDuration(300);
        anim.setFillAfter(true);// 停留在动画结束的位置
        mIvIndicator.startAnimation(anim);
    }

    @Override
    public void onPageSelected(int position) {
    }
}
package com.xspacing.viewpagerindicator;

import java.util.List;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.PagerAdapter;
import android.view.View;

public class FragmentAdapter extends FragmentPagerAdapter {


    List<Fragment> mList;
    public FragmentAdapter(FragmentManager fm) {
        super(fm);
    }

    public FragmentAdapter(FragmentManager fm, List<Fragment> mList) {
        super(fm);
        this.mList = mList;
    }

    @Override
    public int getCount() {
        return mList.size();
    }

    @Override
    public Fragment getItem(int position) {
        return mList.get(position);
    }

}
package com.xspacing.viewpagerindicator;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class FragmentGame extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_game, container, false);
    }

}
package com.xspacing.viewpagerindicator;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class FragmentMovie extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_movie, container, false);
    }

}
package com.xspacing.viewpagerindicator;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class FragmentMusic extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_music, container, false);
    }

}

activity_main.xml

<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.xspacing.viewpagerindicator.MainActivity" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#44ff0000" >

        <TextView
            android:id="@+id/main_tv_title_music"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:gravity="center"
            android:padding="10dp"
            android:text="音乐"
            android:textSize="20sp" />

        <TextView
            android:id="@+id/main_tv_title_movie"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:gravity="center"
            android:padding="10dp"
            android:text="电影"
            android:textSize="20sp" />

        <TextView
            android:id="@+id/main_tv_title_game"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:gravity="center"
            android:padding="10dp"
            android:text="游戏"
            android:textSize="20sp" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#44ff0000" >

        <ImageView
            android:id="@+id/main_iv_indicator"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:scaleType="matrix"
            android:src="@drawable/indicator" />
    </LinearLayout>

    <android.support.v4.view.ViewPager
        android:id="@+id/main_vp_show"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#aaa" >
    </android.support.v4.view.ViewPager>

</LinearLayout>

fragment_game.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="Game" />

</RelativeLayout>

其他两个fragment布局与以上相同

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值