在Android中添加视图

时间:2016-04-02 12:40:41

标签: android android-fragments

我创建了一个DrawCircle View类来绘制一个圆。我想将这个DrawCircle View Class添加到片段中。 DrawCircle View类如下。

public class DrawCircle extends View {

    private Paint paint;

    public DrawCircle(Context context) {
        super(context);
        // create the Paint and set its color
        paint = new Paint();
        paint.setColor(Color.WHITE);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        canvas.drawColor(Color.BLUE);
        canvas.drawCircle(200, 200, 100, paint);
    }
}

在我的片段中,我的布局已经膨胀了。

public class GripForce extends Fragment{
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments() != null) {
            mParam1 = getArguments().getString(ARG_PARAM1);
            mParam2 = getArguments().getString(ARG_PARAM2);
        }


    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        v = inflater.inflate(R.layout.fragment_grip_force, container, false);
        final Button buttonAcce = (Button) v.findViewById(R.id.gripbutton);
        buttonAcce.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                if (vibrate == false) {
                    vibrate = true;
                    buttonAcce.setText("VIBRATE STOP");
                    // Vibrate for 300 milliseconds
                    timer = new Timer();
                    myTimerTask = new MyTimerTask();
                    timer.schedule(myTimerTask, 1, 80000);
                    mVibrator.vibrate(100000);
                } else {
                    timer.cancel();
                    timer.purge();
                    mVibrator.cancel();
                    vibrate = false;
                    buttonAcce.setText("VIBRATE");

                }

            }
        });
        mVibrator = (Vibrator) getActivity().getSystemService(Context.VIBRATOR_SERVICE);


        return v;
    }

}

我的问题是如何在现有视图的基础上获取此DrawCirle视图。

提前致谢。

编辑: 我在xml中设置了View。

<FrameLayout 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"
    tools:context="com.forcetest.GripForce">

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center_horizontal|top">

        <com.abbott.forcetest.DrawCircle
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/circleView"
            android:layout_weight="1"/>
    </LinearLayout>

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="65dp"
        android:layout_gravity="center_horizontal|bottom">



        <Button
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="VIBRATE"
            android:id="@+id/gripbutton"
            android:background="#e71919"
            android:layout_marginLeft="30dp"
            android:layout_marginRight="30dp"
            android:layout_marginBottom="20dp" />
    </LinearLayout>


</FrameLayout>

然后在onCreateView中,程序在

行崩溃
v = inflater.inflate(R.layout.fragment_grip_force, container, false);

什么是狼?

EDIT2: 我把我的xml改为

<FrameLayout 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"
    tools:context="com.abbott.forcetest.GripForce"
    android:id="@+id/gripLayout">

    <!--<LinearLayout-->
        <!--android:orientation="vertical"-->
        <!--android:layout_width="match_parent"-->
        <!--android:layout_height="match_parent"-->
        <!--android:layout_gravity="center_horizontal|top">-->

        <!--<com.abbott.forcetest.DrawCircle-->
            <!--android:layout_width="wrap_content"-->
            <!--android:layout_height="wrap_content"-->
            <!--android:id="@+id/circleView"-->
            <!--android:layout_weight="1"/>-->
    <!--</LinearLayout>-->

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="65dp"
        android:layout_gravity="center_horizontal|bottom">
        <Button
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="VIBRATE"
            android:id="@+id/gripbutton"
            android:background="#e71919"
            android:layout_marginLeft="30dp"
            android:layout_marginRight="30dp"
            android:layout_marginBottom="20dp" />
    </LinearLayout>


</FrameLayout>



Then in the program,

final FrameLayout l_out = (FrameLayout) v.findViewById(R.id.gripLayout);
DrawCircle circleVIew = new DrawCircle(this.getContext());
l_out.addView(circleVIew);

现在有效。

2 个答案:

答案 0 :(得分:1)

只需添加它就像动态添加任何其他视图一样。

只需创建它 -

DrawCircle circle = new DrawCircle(context);

然后将其添加到您的父布局 -

yourParentLayout.addView(circle);

在添加圆形视图时设置所需的任何属性,以便相应地放置它。

请参阅here如何动态添加视图。

答案 1 :(得分:0)

您正在尝试自定义视图。现在假设您已经完成了与视图绘制相关的所有内容(我没有检查与视图相关的代码),现在您需要做的就是放置该视图只需在布局文件中对其进行编码。 / p>

像这样:

<com.example.yourprojectname.DrawCircle
    android:layout_width=xxxx
    android:layout_height=xxx
   />

就像你对TextView或Button所做的那样,在布局xml文件中编码,并记住在java代码中找到findViewById。它会出现。

当然你可以编程实现,在你的代码中尝试addView方法。但是在xml文件中写一下它会更容易一些,你也可以定义你希望该视图显示的位置。