Drawing in a Fragment in Android

我只是一个虾纸丫 提交于 2019-12-08 11:16:57

问题


I have the following code:

import android.app.Fragment;
import android.graphics.Rect;
import android.graphics.Typeface;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.AlphaAnimation;
import android.widget.TextView;

public class MainFragment extends Fragment {

protected AlphaAnimation fadeIn = new AlphaAnimation(0.0f , 1.0f ); 


public MainFragment(){}


public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    View rootView = inflater.inflate(R.layout.main_fragment, container, false);
    String fontPath = "fonts/roboto.ttf";
    Typeface font = Typeface.createFromAsset(getActivity().getAssets(), fontPath);

    TextView txt1 = (TextView) rootView.findViewById(R.id.headerTextView);
    txt1.setTypeface(font); 

    TextView txt2 = (TextView) rootView.findViewById(R.id.instructions);
    txt2.setTypeface(font);


    txt1.startAnimation(fadeIn);
    txt2.startAnimation(fadeIn);
    fadeIn.setDuration(1400);
    fadeIn.setFillAfter(true);

    Rect rectangle = new Rect(200, 56, 200, 112);


    return rootView;
  }
}

I'm trying to draw a rectangle, but for the life of me can't figure it out. I've looked everywhere for the onDraw() method, but I don't believe that is possible in a fragment.


回答1:


There is no difference in drawing a Rectangle in Activity or Fragment. You just need a View added to your layout. You can draw anything as you wish.

Create a custom view and override the onDraw() like this to create a rectangle.

  private class Rectangle extends View{
    Paint paint = new Paint();

    public Rectangle(Context context) {
        super(context);
    }
    @Override
    public void onDraw(Canvas canvas) {
        paint.setColor(Color.GREEN);
        Rect rect = new Rect(20, 56, 200, 112);
        canvas.drawRect(rect, paint );
    }
 }

Now add this view into your layout , it could be the layout set in Fragment or Activity.

RelativeLayout relativeLayout = (RelativeLayout) rootView.findViewById(R.id.container);
relativeLayout.addView(new Rectangle(getActivity()));

ie, R.id.container is the layout id.




回答2:


Create your own RelativeLayout class, in this case MyRelativeLayout (which extends the RelativeLayout class).

Then implement the onDraw feature and add your square.

During the Fragment's onCreateView method, return the MyRelativeLayout.

Read the comments.

public class MainFragment extends Fragment
{
    protected AlphaAnimation fadeIn = new AlphaAnimation(0.0f, 1.0f);

    public MainFragment() { }

    /*
     *  Create a custom RelativeLayout and implement the inherited 'onDraw' 
     *  method
     */
    class MyRelativeLayout extends RelativeLayout
    {
        public MyRelativeLayout(Context context)
        {
            super(context);
        }

        @Override
        protected void onDraw(Canvas canvas)
        {
            /*
             *  Draw your rectangle
             */
            Rect rectangle = new Rect(200, 56, 200, 112);

            Paint paint = new Paint();
            paint.setAntiAlias(true);
            paint.setColor(Color.BLACK);

            canvas.drawRect(rectangle, paint);

            super.onDraw(canvas);
        }
    }

    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState)
    {

        /*
         *  Create the layout
         */
        MyRelativeLayout layout = new MyRelativeLayout(getActivity());
        layout.setLayoutParams(
            new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 
                                       ViewGroup.LayoutParams.MATCH_PARENT));

        /*
         *  Inflate your xml view
         */
        View rootView = 
            inflater.inflate(R.layout.main_fragment, container, false);

        String fontPath = "fonts/roboto.ttf";
        Typeface font = 
            Typeface.createFromAsset(getActivity().getAssets(), fontPath);

        TextView txt1 = (TextView) rootView.findViewById(R.id.headerTextView);
        txt1.setTypeface(font);

        TextView txt2 = (TextView) rootView.findViewById(R.id.instructions);
        txt2.setTypeface(font);

        txt1.startAnimation(fadeIn);
        txt2.startAnimation(fadeIn);

        fadeIn.setDuration(1400);
        fadeIn.setFillAfter(true);

        /*
         *  Add your view to the MyRelativeLayout you made, 'layout'
         */
        layout.addView(rootView);

        /*
         *  Return the 'layout' instead of just the 'rootView'
         */
        return layout;
    }
}


来源:https://stackoverflow.com/questions/23280685/drawing-in-a-fragment-in-android

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!