这是我用于分页的简单的PagerAdapter和onCreate()活动。
public class MPagerAdapter extends PagerAdapter{
List<ViewGroup> pages = null;
public MPagerAdapter(List<ViewGroup> pages){
this.pages = pages;
}
@Override
public Object instantiateItem(ViewGroup collection, int position){
ViewGroup v = pages.get(position);
((ViewPager) collection).addView(v, 0);
return v;
}
@Override
public void destroyItem(ViewGroup collection, int position, Object view){
((ViewPager) collection).removeView((View) view);
}
@Override
public int getCount(){
return pages.size();
}
@Override
public boolean isViewFromObject(View view, Object object){
return view.equals(object);
}
@Override
public void finishUpdate(View arg0){
}
@Override
public void restoreState(Parcelable arg0, ClassLoader arg1){
}
@Override
public Parcelable saveState(){
return null;
}
@Override
public void startUpdate(View arg0){
}
}
这里是onCreate(),其中包含寻呼机的活动。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pager);
getActionBar().setDisplayHomeAsUpEnabled(true);
Intent intent = getIntent();
String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
amount=Integer.parseInt(message);
Resources res = getResources();
Drawable background = res.getDrawable(R.drawable.page_back1);
BackgroudImage bImage = new BackgroudImage(x, y, background);
List<MyLayout> pages = new ArrayList<MyLayout>();
int a = amount/bImage.mPointsList.size();
for (int i=0; i<=a; i++){
MyLayout page = new MyLayout(getBaseContext(), bImage);
page.setLayoutParams(new ViewGroup.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
pages.add(page);
}
MPagerAdapter pagerAdapter = new MPagerAdapter(pages);
ViewPager viewPager = (ViewPager)findViewById(R.id.pager);//new ViewPager(this);
viewPager.setAdapter(pagerAdapter);
viewPager.setCurrentItem(1);
}
我的自定义布局的OnLayout()方法,用作pagerView页面的控件
protected void onLayout(boolean changed, int l, int t, int r, int b) {
if (PagerActivity.amount<=points.size()) {
for (int i=0; i<PagerActivity.amount; i++){
ImageView childV = new ImageView(super.getContext());
childV.setBackgroundResource(R.drawable.lesson_frame_closed);
ViewGroup.LayoutParams imageParams = new ViewGroup.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
childV.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
}
});
this.addView(childV, imageParams);
}
PagerActivity.amount=0;
}
if ((float)(bgrImage.getBackground().getIntrinsicWidth())/(float)(bgrImage.getBackground().getIntrinsicHeight())<(float)this.getMeasuredWidth()/(float)this.getMeasuredHeight()) {
scaleFX=(float)this.getMeasuredHeight()/(float)bgrImage.getBackground().getIntrinsicWidth();
scaleFY=(float)this.getMeasuredHeight()/(float)bgrImage.getBackground().getIntrinsicHeight();
} else {
scaleFX=(float)this.getMeasuredWidth()/(float)bgrImage.getBackground().getIntrinsicWidth();
scaleFY=(float)this.getMeasuredWidth()/(float)bgrImage.getBackground().getIntrinsicHeight();
}
for (int i = 0; i < getChildCount(); i++) {
final View childV = getChildAt(i);
if (childV.getVisibility() != View.VISIBLE)
continue;
childV.layout((int)(points.get(i).getOriginX()*scaleFX), (int)(points.get(i).getOriginY()*scaleFY), childV.getWidth(), childV.getHeight());
}
}
无法理解为什么没有调用InstantiateItem()。任何有用的想法将不胜感激。
答案 0 :(得分:0)
ViewPager
是View
,应该添加到用户界面。通常通过在布局文件中声明它。
从SDK示例中提取:
布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:orientation="vertical"
android:padding="4dip" >
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="0px"
android:layout_weight="1" >
</android.support.v4.view.ViewPager>
...
活动类
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_pager);
mAdapter = new MyAdapter(getSupportFragmentManager());
mPager = (ViewPager)findViewById(R.id.pager);
mPager.setAdapter(mAdapter);
...
完整的源代码位于SDK的extras / android / support / samples / Support4Demos目录中