两个相同布局的viewpage无法正常工作

时间:2015-03-07 19:21:36

标签: android android-fragments viewpagerindicator

尝试使用相同布局的指示器实现两个viewpage,但仅显示1个show。这是代码: 如果有人有更好的实施例子,我将非常感谢:)

MainActivity

package com.blogspot.ksoichiro.viewpagersample;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;


public class MainActivity extends Activity {

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

        MyPagerAdapter adapter = new MyPagerAdapter(this);
        ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
        viewPager.setAdapter(adapter);
        ViewIndicator indicator = (ViewIndicator) findViewById(R.id.indicator);
        indicator.setViewPager(viewPager);
        indicator.setPosition(1);

        MyPagerAdapter adapter1 = new MyPagerAdapter(this);
        ViewPager viewPager1 = (ViewPager) findViewById(R.id.pager1);
        viewPager1.setAdapter(adapter1);
        ViewIndicator indicator1 = (ViewIndicator) findViewById(R.id.indicator1);
        indicator1.setViewPager(viewPager1);
        indicator1.setPosition(1);
    }

    private class MyPagerAdapter extends PagerAdapter {

        /** Number of views(pages). */
        private static final int NUM_OF_VIEWS = 5;

        private Context mContext;

        public MyPagerAdapter(Context context) {
            mContext = context;
        }

        @Override
        public int getCount() {
            return NUM_OF_VIEWS;
        }

        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            TextView view = new TextView(mContext);
            view.setText("This is the " + (position + 1) + "th view.");

            ((ViewPager) container).addView(view);
            return view;
        }

        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            ((ViewPager) container).removeView((TextView) object);
        }

        @Override
        public boolean isViewFromObject(View view, Object object) {
            return view == ((TextView) object);
        }

    }

}

ViewIndicator

package com.blogspot.ksoichiro.viewpagersample;

import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.View;


public class ViewIndicator extends View {

    private static final float RADIUS = 5.0f;
    private static final float DISTANCE = 30.0f;

    private int mNumOfViews;
    private int mPosition;
    private ViewPager mViewPager;

    public ViewIndicator(Context context) {
        super(context);
    }

    /**
     * @param context
     * @param attrs
     * @param defStyle
     */
    public ViewIndicator(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    /**
     * @param context
     * @param attrs
     */
    public ViewIndicator(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public void setPosition(final int position) {
        if (position < mNumOfViews) {
            mPosition = position;
            if (mViewPager != null) {
                mViewPager.setCurrentItem(mPosition);
            }
            invalidate();
        }
    }

    public void setViewPager(final ViewPager viewPager) {
        mViewPager = viewPager;
        updateNumOfViews();
        mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrollStateChanged(int state) {
            }

            @Override
            public void onPageScrolled(int position, float positionOffest, int positionOffestPixels) {
            }

            @Override
            public void onPageSelected(int position) {
                updateNumOfViews();
                setPosition(position);
            }
        });
    }

    @SuppressLint("DrawAllocation")
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        Paint paint = new Paint();
        paint.setStrokeWidth(1);
        paint.setStrokeCap(Paint.Cap.ROUND);
        paint.setColor(Color.BLACK);
        paint.setAntiAlias(true);

        for (int i = 0; i < mNumOfViews; i++) {
            float cx = (getWidth() - (mNumOfViews - 1) * DISTANCE) / 2 + i * DISTANCE;
            float cy = getHeight() / 2.0f;
            if (mPosition == i) {
                paint.setStyle(Paint.Style.FILL_AND_STROKE);
            } else {
                paint.setStyle(Paint.Style.STROKE);
            }
            canvas.drawCircle(cx, cy, RADIUS, paint);
        }
    }

    private void updateNumOfViews() {
        if (mViewPager.getAdapter() == null) {
            mNumOfViews = 0;
        } else {
            mNumOfViews = mViewPager.getAdapter().getCount();
        }
    }

}

activity_main.xml中

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:padding="10dp">

        <Button
            android:id="@+id/button_dummy"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/button_label_dummy" />

        <com.blogspot.ksoichiro.viewpagersample.ViewIndicator
            android:id="@+id/indicator"
            android:layout_width="match_parent"
            android:layout_height="30dp"
            android:layout_above="@id/button_dummy" />

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

    </LinearLayout>

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:padding="10dp">

        <Button
            android:id="@+id/button_dummy1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/button_label_dummy" />

        <com.blogspot.ksoichiro.viewpagersample.ViewIndicator
            android:id="@+id/indicator1"
            android:layout_width="match_parent"
            android:layout_height="30dp"
            android:layout_above="@id/button_dummy" />

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

    </LinearLayout>
</LinearLayout>

1 个答案:

答案 0 :(得分:0)

您的布局有几个问题。您需要使用LinearLayouts的权重来使子视图适合。

试试这个:

<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">

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:orientation="vertical"
        android:padding="10dp">

        <Button
            android:id="@+id/button_dummy"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/button_label_dummy" />

        <com.blogspot.ksoichiro.viewpagersample.ViewIndicator
            android:id="@+id/indicator"
            android:layout_width="match_parent"
            android:layout_height="30dp"
            android:layout_above="@id/button_dummy" />

        <android.support.v4.view.ViewPager
            android:id="@+id/pager"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:layout_above="@id/indicator" />

    </LinearLayout>

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:orientation="vertical"
        android:padding="10dp">

        <Button
            android:id="@+id/button_dummy1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/button_label_dummy" />

        <com.blogspot.ksoichiro.viewpagersample.ViewIndicator
            android:id="@+id/indicator1"
            android:layout_width="match_parent"
            android:layout_height="30dp"
            android:layout_above="@id/button_dummy" />

        <android.support.v4.view.ViewPager
            android:id="@+id/pager1"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:layout_above="@id/indicator" />

    </LinearLayout>
</LinearLayout>