尝试使用相同布局的指示器实现两个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>
答案 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>