work_weipa_viewpager

来源:互联网 发布:南阳企业网站排名优化 编辑:程序博客网 时间:2024/05/16 12:43

问题1:viewpager如何实现左右滑动和点击切换功能?

回答:adapter+layout+fragment

例子:①布局文件

fragment_login.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:background="#d0d0d0"    android:orientation="vertical" >    <LinearLayout        android:layout_marginLeft="5dp"        android:layout_marginRight="5dp"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:orientation="vertical"        android:gravity="center" >        <LinearLayout            android:id="@+id/linearLayout1"            android:layout_width="fill_parent"            android:layout_height="45dp"            android:background="#ffffff"            android:gravity="center"            android:paddingTop="10dp" >            <TextView                android:id="@+id/tv_tab_1"                android:layout_width="fill_parent"                android:layout_height="fill_parent"                android:layout_weight="1.0"                android:gravity="center"                  android:text="我发表的"                android:textColor="#000000"                android:textSize="18sp" />                        <ImageView android:layout_width="1dp"                android:layout_height="20dp"                android:layout_gravity="center"                android:src="@drawable/dividegrey"/>            <TextView                android:id="@+id/tv_tab_2"                android:layout_width="fill_parent"                android:layout_height="fill_parent"                android:layout_weight="1.0"                android:gravity="center"                android:text="关于软件"                android:textColor="#000000"                android:textSize="18sp" />                        <ImageView android:layout_width="1dp"                android:layout_height="20dp"                android:layout_gravity="center"                android:src="@drawable/dividegrey"/>                        <TextView                android:id="@+id/tv_tab_3"                android:layout_width="fill_parent"                android:layout_height="fill_parent"                android:layout_weight="1.0"                android:gravity="center"                android:text="登录软件"                android:textColor="#000000"                android:textSize="18sp" />        </LinearLayout>        <LinearLayout            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:layout_gravity="bottom"            android:orientation="vertical"            android:paddingBottom="3dp" >            <ImageView                android:id="@+id/iv_bottom_line"                android:layout_width="100dp"                android:layout_height="2dp"                android:scaleType="matrix"                android:src="@drawable/below" />        </LinearLayout>    </LinearLayout>    <android.support.v4.view.ViewPager        android:id="@+id/vPager"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:layout_marginLeft="5dp"        android:layout_marginRight="5dp"        android:layout_gravity="center"        android:layout_weight="1.0"        android:background="#ffffff"        android:flipInterval="30"        android:persistentDrawingCache="animation" /></LinearLayout>

②adapter文件

MyFragmentPagerAdapter.java

package com.example.weipa.adapter;import java.util.ArrayList;import android.support.v4.app.Fragment;import android.support.v4.app.FragmentManager;import android.support.v4.app.FragmentPagerAdapter;public class MyFragmentPagerAdapter extends FragmentPagerAdapter {    private ArrayList<Fragment> fragmentsList;    public MyFragmentPagerAdapter(FragmentManager fm) {        super(fm);    }    public MyFragmentPagerAdapter(FragmentManager fm, ArrayList<Fragment> fragments) {        super(fm);        this.fragmentsList = fragments;    }    @Override    public int getCount() {        return fragmentsList.size();    }    @Override    public Fragment getItem(int arg0) {        return fragmentsList.get(arg0);    }    @Override    public int getItemPosition(Object object) {        return super.getItemPosition(object);    }}

③实现

LoginFragment.java

public class LoginFragment extends Fragment {Resources resources;private ViewPager mPager;private ArrayList<Fragment> fragmentsList;private ImageView ivBottomLine;private TextView tvTab1, tvTab2, tvTab3;private int currIndex = 0;private int bottomLineWidth;private int offset = 0;private int position_one;private int position_two;public final static int num = 3;Fragment login1;Fragment login2;Fragment login3;private String username;private Activity activity;@Overridepublic void onAttach(Activity activity) {super.onAttach(activity);this.activity = activity;}public LoginFragment() {}public LoginFragment(String username) {this.username = username;}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {// TODO Auto-generated method stubView view = inflater.inflate(R.layout.fragment_login, container, false);MainActivity mainActivity=(MainActivity) activity;mainActivity.getUserId();this.resources = getResources();mPager = (ViewPager) view.findViewById(R.id.vPager);login1 = new LoginFragment1();login2 = new LoginFragment2();login3 = new LoginFragment3(this.username);tvTab1 = (TextView) view.findViewById(R.id.tv_tab_1);tvTab2 = (TextView) view.findViewById(R.id.tv_tab_2);tvTab3 = (TextView) view.findViewById(R.id.tv_tab_3);initWidth(view);initTextView(view);initViewPager(view);TranslateAnimation animation = new TranslateAnimation(offset,position_two, 0, 0);animation.setFillAfter(true);animation.setDuration(30);ivBottomLine.startAnimation(animation);return view;}public void initTextView(View parentView) {// TODO Auto-generated method stubtvTab1.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubmPager.setCurrentItem(0);}});tvTab2.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubmPager.setCurrentItem(1);}});tvTab3.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubmPager.setCurrentItem(2);}});}private void initViewPager(View parentView) {fragmentsList = new ArrayList<Fragment>();fragmentsList.add(login1);fragmentsList.add(login2);fragmentsList.add(login3);mPager.setAdapter(new MyFragmentPagerAdapter(getChildFragmentManager(),fragmentsList));mPager.setOnPageChangeListener(new MyOnPageChangeListener());mPager.setCurrentItem(2);}private void initWidth(View parentView) {ivBottomLine = (ImageView) parentView.findViewById(R.id.iv_bottom_line);bottomLineWidth = ivBottomLine.getLayoutParams().width;DisplayMetrics dm = new DisplayMetrics();getActivity().getWindowManager().getDefaultDisplay().getMetrics(dm);int screenW = dm.widthPixels;offset = (int) ((screenW / num - bottomLineWidth) / 2);int avg = (int) (screenW / num);position_one = avg + offset-8;position_two = 2 * avg + offset-18;}public class MyOnPageChangeListener implements OnPageChangeListener {@Overridepublic void onPageSelected(int arg0) {Animation animation = null;switch (arg0) {case 0:if (currIndex == 1) {animation = new TranslateAnimation(position_one, offset, 0,0);}if (currIndex == 2) {animation = new TranslateAnimation(position_two, offset, 0,0);}break;case 1:if (currIndex == 0) {animation = new TranslateAnimation(offset, position_one, 0,0);}if (currIndex == 2) {animation = new TranslateAnimation(position_two,position_one, 0, 0);}break;case 2:if (currIndex == 1) {animation = new TranslateAnimation(position_one,position_two, 0, 0);}if (currIndex == 0) {animation = new TranslateAnimation(offset, position_two, 0,0);}break;default:break;}currIndex = arg0;animation.setFillAfter(true);animation.setDuration(30);ivBottomLine.startAnimation(animation);}@Overridepublic void onPageScrolled(int arg0, float arg1, int arg2) {}@Overridepublic void onPageScrollStateChanged(int arg0) {}}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}}

图示:


0 0
原创粉丝点击