Android 在ViewPager中绘制矩形

Android 在ViewPager中绘制矩形,android,android-canvas,Android,Android Canvas,在ViewPager中动态绘制矩形的最佳方式是什么?我可以在ViewPager使用的xml中添加画布吗?如果是,将如何实施 碎片活动: public class Tabs extends FragmentActivity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.tabs); }

在ViewPager中动态绘制矩形的最佳方式是什么?我可以在ViewPager使用的xml中添加画布吗?如果是,将如何实施

碎片活动:

public class Tabs extends FragmentActivity {
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.tabs);
    }
}
我使用的FragmentPagerAdapter方法:

private class ScreenSlidePagerAdapter extends FragmentPagerAdapter {
    public ScreenSlidePagerAdapter(android.support.v4.app.FragmentManager fm) {
        super(fm);
    }

    @Override
    public android.support.v4.app.Fragment getItem(int position) {
        return ScreenSlidePageFragment.create(position);
    }

    @Override
    public int getCount() {
        return NUM_PAGES;
    }
}
这是我为ViewPager准备的片段

public class ScreenSlidePageFragment extends Fragment {
/**
 * The argument key for the page number this fragment represents.
 */
public static final String ARG_PAGE = "page";
public static TextView personalTextView, cityTextView;

ViewGroup rootView = null;

/**
 * The fragment's page number, which is set to the argument value for {@link #ARG_PAGE}.
 */
private int mPageNumber;
private boolean isExanded;

/**
 * Factory method for this fragment class. Constructs a new fragment for the given page number.
 */
public static Fragment create(int position) {
    ScreenSlidePageFragment fragment = new ScreenSlidePageFragment();
    Bundle args = new Bundle();
    args.putInt(ARG_PAGE, position);
    fragment.setArguments(args);
    return fragment;
}

public ScreenSlidePageFragment() {
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mPageNumber = getArguments().getInt(ARG_PAGE);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    // Inflate the layout containing a title and body text.

    if(mPageNumber + 1==1){
        rootView = (ViewGroup) inflater
                .inflate(R.layout.fragment_screen_slide_page, container, false);


    }else if(mPageNumber + 1==2){
        rootView = (ViewGroup) inflater
                .inflate(R.layout.fragment_screen_slide_page2, container, false);

    }else if(mPageNumber + 1==3){
        rootView = (ViewGroup) inflater
                .inflate(R.layout.fragment_screen_slide_page3, container, false);

    }else if(mPageNumber + 1==4){
        rootView = (ViewGroup) inflater
                .inflate(R.layout.fragment_screen_slide_page4, container, false);

    }


    return rootView;
}


/**
 * Returns the page number represented by this fragment object.
 */
public int getPageNumber() {
    return mPageNumber;
}
}

下面是我正在使用的fragment\u screen\u slide\u page.xml:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:mySwitch="http://schemas.android.com/apk/res-auto"
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="match_parent">

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="158dp"
    android:orientation="vertical"
    android:padding="16dp" >

    <!-- Need to add a rectangle here -->
    <!-- This is the rectangle view I'm trying to draw with -->
            <com.draw.DrawBudget
         android:id="@+id/budget"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:gravity="center"/>
    <TextView
        android:id="@+id/texttop"
        style="?android:textAppearanceLarge"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="16dp"
        android:gravity="center_horizontal"
        android:text="BUDGET PLANNER"
        android:textStyle="bold" />

    <ImageView
        android:id="@+id/arrow"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="right"
        android:layout_marginRight="20dp"
        android:layout_marginTop="10dp"
        android:layout_toRightOf="@id/texttop"
        android:src="@drawable/arrow" />

    <EditText
        android:id="@+id/vnosEmaila"
        android:layout_width="100dip"
        android:layout_height="20dip"
        android:layout_alignBottom="@+id/textView1"
        android:layout_alignLeft="@+id/textView1"
        android:layout_alignTop="@+id/textView1"
        android:layout_marginLeft="99dp"
        android:paddingBottom="0dp"
        android:paddingTop="0dp"
        android:text="$60.00"
        android:textSize="12sp" />

     <TextView
         android:id="@+id/textView1"
         style="?android:textAppearanceSmall"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_below="@+id/arrow"
         android:layout_toLeftOf="@+id/arrow"
         android:lineSpacingMultiplier="1.2"
         android:paddingTop="2dip"
         android:text="Spending Goal" />

     <com.utility.less.MySwitch
         android:id="@+id/switch2"
         style="@style/mySwitchStyle"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_alignParentBottom="true"
         android:gravity="center"
         mySwitch:textOff="ON"
         mySwitch:textOn="OFF"
         mySwitch:textOnThumb="false"
         mySwitch:thumb="@drawable/switch_thumb"
         mySwitch:track="@drawable/switch_track" />

     <TextView
         android:id="@+id/days"
         style="?android:textAppearanceSmall"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_alignParentRight="true"
         android:layout_alignParentBottom="true"
         android:lineSpacingMultiplier="1.2"
         android:paddingTop="2dip"
         android:text="24 days left" />

</RelativeLayout>

您应该能够简单地重写onDraw()并绘制矩形。您需要创建绘制期间使用的绘制对象,这可以在构造函数中完成

private Paint rectColor = new Paint();
rectColor.setColor (...);
然后,需要绘制矩形:

@Override
protected void  onDraw (Canvas canvas) 
{
  super.onDraw (canvas);
  canvas.drawRect (..., rectColor);
}

你能再解释一下吗?如果可以,也许可以提供一些代码?onDraw方法应该去哪里?它应该在ViewPager使用的FragmentPagerAdapter方法中,在用于膨胀xml屏幕的片段中,在启动ViewPager的主要FragmentActivity中,还是在其他地方?(请参见上面的编辑)在需要包含矩形的视图中。这取决于您希望视图显示的方式。如果要覆盖文本和图像,只需在RelativeLayout中绘制即可。如果它需要占用自己的空间,您需要使矩形本身成为一个视图。我创建了一个自定义视图来绘制矩形,但它不起作用(请参阅上面的编辑以获取完整的代码)。我认为您需要反转参数:应为left、top、right-bottom==0、0、100、100。
@Override
protected void  onDraw (Canvas canvas) 
{
  super.onDraw (canvas);
  canvas.drawRect (..., rectColor);
}