2013-07-15 29 views
0

我有這個類進行佈局,而不是編程

MyTouchEventView.java

import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.graphics.Path; 
import android.graphics.RectF; 
import android.view.MotionEvent; 
import android.view.View; 
import android.view.ViewGroup.LayoutParams; 
import android.widget.Button; 

public class MyTouchEventView extends View { 

private Paint paint = new Paint(); 
private Path path = new Path(); 
private Path circlePath = new Path(); 

public Button btnReset; 
public LayoutParams params; 

public MyTouchEventView(Context context) { 
    super(context); 

    paint.setAntiAlias(true); 
    paint.setColor(Color.GREEN); 
    paint.setStyle(Paint.Style.STROKE); 
    paint.setStrokeJoin(Paint.Join.ROUND); 
    paint.setStrokeWidth(4f); 

    btnReset = new Button(context); 
    btnReset.setText("Clear Screen"); 

    params = new LayoutParams(LayoutParams.MATCH_PARENT, 
      LayoutParams.WRAP_CONTENT); 
    btnReset.setLayoutParams(params); 

    btnReset.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View v) { 
      path.reset(); 
      postInvalidate(); 

     } 
    }); 

} 

@Override 
protected void onDraw(Canvas canvas) { 

    canvas.drawPath(path, paint); 
} 

@Override 
public boolean onTouchEvent(MotionEvent event) { 

    float pointX = event.getX(); 
    float pointY = event.getY(); 

    switch (event.getAction()) { 
    case MotionEvent.ACTION_DOWN: 
     path.moveTo(pointX, pointY); 

     return true; 
    case MotionEvent.ACTION_MOVE: 
     path.lineTo(pointX, pointY); 
     circlePath.reset(); 

     circlePath.addCircle(pointX, pointY, 30, Path.Direction.CW); 

     break; 

    case MotionEvent.ACTION_UP: 
     circlePath.reset(); 

     break; 
    default: 
     return false; 
    } 

    postInvalidate(); 
    return true; 
} 
} 

DrawingBrush.java

public class DrawingBrush extends Activity { 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    MyTouchEventView tv = new MyTouchEventView(this); 
    setContentView(tv); 
    addContentView(tv.btnReset, tv.params); 
} 

@Override 
protected void onPause() { 
    // TODO Auto-generated method stub 
    super.onPause(); 
    finish(); 
} 

} 

現在我想轉換此

MyTouchEventView tv = new MyTouchEventView(this); 
setContentView(tv); 
addContentView(tv.btnReset, tv.params); 

setContentView(R.layout.main);並將按鈕和其他組件在「main.xml」佈局中查看

我該怎麼做?希望任何人都有我的意思。

回答

2

MyTouchEventView應該至少有一個以上的構造函數。 除Context之外,此構造函數應接受AttributeSet參數。

public MyTouchEventView (Context context, AttributeSet attrs) { 
    // perform initialization 
} 

當在XML佈局文件中聲明視圖時,它將被調用。

然後,你將宣佈這樣的XML視圖:

<com.my_package_name.MyTouchEventView 
    .... 
     /> 

本課題採用的是Android文檔詳細解釋。看看這裏:http://developer.android.com/training/custom-views/index.html

+0

我想刪除MyTouchEventView類,並把什麼它的類DrawingBrush – Eman87

+0

我不知道我明白你在說什麼。但是,如果您需要在DrawingBrush中使用MyTouchEventView,則可以通過添加一個構造函數來修改MyTouchEventView類,創建一個新的佈局XML文件,在該XML文件中聲明MyTouchEventView,然後使用該XML文件在'DrawingBrush'中。如果您對自定義視圖不熟悉,我強烈建議您暫停一下,然後先閱讀文檔。 –

+0

感謝您的回答,這個例子http://mobile.tutsplus.com/tutorials/android/android-sdk-creating-custom-views-2/也幫助我 – Eman87