How to use my own view in an Android layout?

0

I have created one view, view code is,

   public class MyDraw extends View{

    

    //List<Point> mArryLstpoints = new ArrayList<Point>();
    Paint paint =new Paint();
    Paint mPaintAlphabet = new Paint();
    public MyDraw(Context context) {
        super(context);
        
    
        paint.setColor(Color.BLUE);
        paint.setAntiAlias(true);
         
    
        // TODO Auto-generated constructor stub
    }
    public MyDraw(Context context, AttributeSet attributeSet) {
        super(context, attributeSet);
             
        paint.setColor(Color.BLUE);
        paint.setAntiAlias(true);
        
        mPaintAlphabet.setDither(true);
        mPaintAlphabet.setColor(0xFFFF0000);
        mPaintAlphabet.setStyle(Paint.Style.STROKE);
        mPaintAlphabet.setStrokeJoin(Paint.Join.ROUND);
        mPaintAlphabet.setStrokeCap(Paint.Cap.ROUND);
        mPaintAlphabet.setStrokeWidth(3);
        mPaintAlphabet.setTextSize(400);
    }
    
    public void onDraw(Canvas canvas){
        canvas.drawColor(Color.GRAY);
        canvas.drawText("A",100,350, mPaintAlphabet);
        System.out.println("in on draw");
        for(Point mPoint:MyAlphabetsActivity.mArryLstpoints)
        canvas.drawCircle(mPoint.x, mPoint.y, 12, paint);
        
    }
    
    }

I want use this view in layout and I want to set background images for the view. I am using following code,

  <?xml version="1.0" encoding="utf-8"?>

  <com.qteq.myalphabets.MyDraw
       xmlns:android="http://schemas.android.com/apk/res/android"
       android:id="@+id/android:list"
       android:layout_width="fill_parent"
       android:layout_height="fill_parent" ></com.qteq.myalphabets.MyDraw>

My activity class is,

public class MyAlphabetsActivity extends Activity {
    /** Called when the activity is first created. */

    MyDraw mMyDraw;
    Button mBtnOk;
    AttributeSet attributeSet;
    public static List<Point> mArryLstpoints = new ArrayList<Point>();
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        /*
         * getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
         * WindowManager.LayoutParams.FLAG_FULLSCREEN);
         */
        /*
         * mMyDraw=new MyDraw(this); setContentView(mMyDraw);
         * mMyDraw.requestFocus();
         */
        mMyDraw = (MyDraw) findViewById(R.id.mMyDraw_layout);
        mMyDraw.bringToFront();
        mMyDraw.requestFocus();
        mMyDraw.setOnTouchListener(new OnTouchListener() {
            
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                // TODO Auto-generated method stub
                Point mPoint=new Point();
                mPoint.x=event.getX();
                mPoint.y=event.getY();
                System.out.println("in on touch");
                mArryLstpoints.add(mPoint);
                System.out.println("Array list is-----"+mArryLstpoints);
                
                setContentView(R.layout.main);
                return true;
            }
        });
        // setContentView(R.layout.main);
    }
}
    class Point{
        public float srtx;
        float x, y;
        
        @Override
        public String toString() {
            System.out.println("in on point");
            return x + ", " + y;       
    }
    }

and Displaying and onTouch Method called only one time.

android
asked on Stack Overflow Nov 23, 2011 by suresh • edited Jul 12, 2020 by halfer

2 Answers

1

You can place your view within a layout in your XML and there can be other elements, as well, within that layout. You can set layout background to something, too.

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
       android:id="@+id/android:list"
       android:layout_width="fill_parent"
       android:layout_height="fill_parent" 
       android:orientation="vertical"
       android:background="@drawable/mybackground">

 <com.qteq.myalphabets.MyDraw
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"/>

 <Button
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:text="Button" />


</LinearLayout>
answered on Stack Overflow Nov 23, 2011 by Alexander Kulyakhtin • edited Nov 23, 2011 by Alexander Kulyakhtin
1

You are Adding view with fill_parent width and height , so no space to add other views like buttons and images .

one of the possible implementation

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout  xmlns:android="http://schemas.android.com/apk/res/android"
       android:id="@+id/android:list"
       android:layout_width="fill_parent"
       android:layout_height="fill_parent">

  <com.qteq.myalphabets.MyDraw
   xmlns:android="http://schemas.android.com/apk/res/android"
       android:id="@+id/android:list"
       android:layout_width="fill_parent"
       android:layout_height="wrap_contentt" ></com.qteq.myalphabets.MyDraw>
<Button/>
<ImageView/>
</LinearLayout>

Dont forget to add constructor

public MyDraw(Context context, AttributeSet attributeSet) {
        super(context, ttributeSet);

in MyDraw.java

******** *editing* ******

in onTouch() return super(v, event) instead of true ; also check if you need to write setOnTouchListener() to view or canvas .

answered on Stack Overflow Nov 23, 2011 by Shailendra Singh Rajawat • edited Nov 23, 2011 by Shailendra Singh Rajawat

User contributions licensed under CC BY-SA 3.0