フラグメントのAndroidドットスライドスイッチページは以下に示すと

変更したい場合は、単にコードを貼り付け開始、スペードで始まる行に完全に使用をペーストするのが面倒、これは、実際には、その後、これに基づいてうまく基本的な枠組みを変更され、

例えば、最初のスライドが表示された直後に、この小さなスポット(怠け者が開始します)。

MainActivityレイアウト:  

新しい動的フラグメントを追加するためのボタン

以下はのLinearLayoutドットを格納しています

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.umeng.soexample.hongyangzzzz.MainActivity">

    <android.support.v4.view.ViewPager
        android:id="@+id/vp"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

    <Button
        android:id="@+id/btn1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:text="Btn1"
        android:textAllCaps="false"/>


    <LinearLayout
        android:id="@+id/ll"
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:layout_alignParentBottom="true"
        android:gravity="center"
        android:orientation="horizontal"/>



</RelativeLayout>

私たちの新しいレイアウトと対応する4つのフラグメントを切り替えるために

F1:

public class F1 extends Fragment {

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

    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
    }

}

F1のレイアウト:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:background="#121212"
              android:layout_width="match_parent"
              android:layout_height="match_parent">

</LinearLayout>

同じと他のいくつかが、レイアウトが異なるFragemnt区別するために、背景色と同じではありません

MyAdapter:

public class MyAdapter extends FragmentPagerAdapter {

    private ArrayList<Fragment> data;

    public MyAdapter(FragmentManager fm) {
        super(fm);
    }

    public MyAdapter(FragmentManager fm, ArrayList<Fragment> data) {
        super(fm);
        this.data = data;
    }

    public void setData(ArrayList<Fragment> data) {
        this.data = data;
        notifyDataSetChanged();
    }

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

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

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
    }

}

ドット定義ポイント導入されたバージョン:

public class Point extends View {

    private int r = 9;
    private boolean isSelected = false;
    private Paint mPaint;

    private void initPaint() {
        mPaint = new Paint();
        mPaint.setStyle(Paint.Style.FILL);
        mPaint.setStrokeWidth(0);
        mPaint.setAntiAlias(true);
        mPaint.setColor(getResources().getColor(R.color.colorWhite));
    }


    public Point(Context context) {
        super(context);
        initPaint();
    }

    public Point(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        initPaint();
    }

    public Point(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        initPaint();
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        if (isSelected) {
            mPaint.setColor(getResources().getColor(R.color.colorConnectDetail));
        } else {
            mPaint.setColor(getResources().getColor(R.color.colorTextColorDemo));
        }
        canvas.drawCircle(getWidth() / 2, getHeight() / 2, r, mPaint);
    }

    @Override
    public void setSelected(boolean selected) {
        isSelected = selected;
        invalidate();
    }
}

あなたがあなた自身のスタイルを書くことができますポイント

ここMainActivityは以下のとおりです。

public class MainActivity extends AppCompatActivity implements View.OnClickListener, ViewPager.OnPageChangeListener {

    private ViewPager vp;
    private MyAdapter mAdapter;
    private ArrayList<Fragment> data;

    private F1 f1;
    private F2 f2;
    private F3 f3;
    private F4 f4;

    private Button btn1;
    private LinearLayout ll;

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

        vp = (ViewPager) findViewById(R.id.vp);
        data = new ArrayList<>();
        f1 = new F1();
        f2 = new F2();
        f3 = new F3();
        data.add(f1);
        data.add(f2);
        data.add(f3);
        mAdapter = new MyAdapter(getSupportFragmentManager(), data);
        vp.setAdapter(mAdapter);
        btn1 = (Button) findViewById(R.id.btn1);
        btn1.setOnClickListener(this);
        vp.addOnPageChangeListener(this);
        ll = (LinearLayout) findViewById(R.id.ll);

    }


    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn1:
                f4 = new F4();
                data.add(f4);
                mAdapter.setData(data);
                break;
        }
    }

    //下面三个是ViewPager 滑动监听
    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

    }

    /**
     * 滑动监听回调
     *
     * @param position 第一页0 第二页1 第三页2   显示的是到哪个页面的时候  比如第一页到第二页就是1
     *                 第二页到第一页就是0
     */
    @Override
    public void onPageSelected(int position) {
        ll.removeAllViews();
        //总共的页数
        int page = data.size();
        for (int i = 0; i < page; i++) {
            Point point = new Point(this);
            if (i == position) {
                point.setSelected(true);
            } else {
                point.setSelected(false);
            }
            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(50, 50);
            params.leftMargin = 0;
            params.topMargin = 0;
            ll.addView(point, params);
        }

    }

    @Override
    public void onPageScrollStateChanged(int state) {

    }

}

動的にフラグメントを追加するボタンは、変更があるでしょう、以下をクリックした後、通常のですが、私は怠け者です。

OK、これは私が仕上げ忘れてしまった未来を防ぐことです。

公開された124元の記事 ウォンの賞賛141 ビュー160 000 +

おすすめ

転載: blog.csdn.net/weixin_36838630/article/details/79655563