2011-11-23 53 views
0

我创建一个视图,视图代码,如何在布局中使用我自己的视图?

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); 

    } 

    } 

我想利用在布局这个看法,我想设置为view.I背景图片我用下面的代码,

<?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> 

我的活动类,

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;  
    } 
    } 

和显示和onTouch方法调用一次.....请帮我

+0

在onTouch方法中添加setContentView(R.layout.main)后,它只能工作一次,接下来不工作... – suresh

+0

您没有发布完整的代码,因此很难说。码。 – Delwin

回答

1

您正在使用fill_parent宽度和高度添加视图,因此没有空间来添加按钮和图像等其他视图。

可能实施的一个

<?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> 

不要忘记在MyDraw.java

** * ** *添加构造

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

* * * 编辑 * * ** * **

onTouch() 回报super(v, event)代替true; 还检查是否需要编写​​来查看或画布。

+0

嗨Rajawat感谢回复,我已经包括上述代码到我的应用程序....它显示视图...但视图不工作....意味着我的视图包含字母表“A”,如果我们画出任何像“A”或“B”或“C”这样的不工作的地方, – suresh

+0

可能会在画布边界150,450处出现纵坐标。所以首先获取高度和宽度bt Canvas.getHeight()..并在其边界内绘制alhabet。第二个循环中的字母与字母重叠的可能性更大。 –

+0

字母显示(非常小)...但绘图不工作....意味着onTouch方法不打电话 – suresh

1

您可以将视图放置在XML中的布局中,并且在该布局中还可以有其他元素。你也可以设置布局背景。

<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> 
+0

嗨亚历克斯感谢重播..我用我的layout.it的代码给布局InflateException – suresh

+0

可能是因为我已经拼写包装内容而不是wrap_content。我纠正了。为什么你想膨胀,你可能只是在你的活动中使用setContentView –

+0

public class MyActivity extends活动{ \t MyDraw mMyDraw; (保存实例状态) \t \t \t setContentView(R.layout.main); \t} } – suresh

相关问题