2016-05-15 68 views
1

我最近開始爲android開發,並試圖將多個視圖添加到佈局時卡住了。它實際上適用於第一次觸摸,但在此之後它什麼都不做。日誌雖然繼續工作,並顯示觸摸已被檢測到並顯示事件的位置。我有以下代碼mLayout.addView()僅工作一次

public class MainActivity extends Activity { 
private LinearLayout mLayout; 
private Context con = this; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    mLayout = (LinearLayout) findViewById(R.id.lLayout); 
    mLayout.setOnTouchListener(new View.OnTouchListener() { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      switch (event.getActionMasked()) { 
       case MotionEvent.ACTION_DOWN: 
        mLayout.addView(createNewView(event.getX(), event.getY())); 
        Log.d("this ","View has been add." + event.getX()+ ", " + event.getY()); 
        break; 
      } 
      return false; 
     } 
    }); 
} 

private markerView createNewView(float x, float y) { 
    final LayoutParams lparams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
    final markerView mView = new markerView(con, 150, x, y); 
    mView.setLayoutParams(lparams); 
    return mView; 
}} 

和 公共類markerView擴展視圖實現View.OnTouchListener {

private Paint paint = new Paint(); 
private int diameter; 
private float X,Y; 

public markerView(Context context, int dia, float dx, float dy) { 
    super(context); 
    diameter = dia; 
    X = dx; Y = dy; 
    paint.setColor(Color.GREEN); 
    paint.setStyle(Style.STROKE); 
    paint.setStrokeWidth((float) 4.0); 
} 

@Override 
protected void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 
    canvas.save(); 
    canvas.drawCircle(X, Y, diameter, paint); 
    canvas.restore(); 
} 

@Override 
public boolean onTouch(View v, MotionEvent event) { 
    return true; 
}} 

回答

1

我剛剛發現瀏覽AVE一直final標籤創建但從未出現,因爲第一個具有parentLayout的大小。所以我只是添加下面的方法,它的工作。由於RelativeLayout,位置需要改變,但那不是問題;) 這裏是代碼:

@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    setMeasuredDimension(2*diameter, 2*diameter); 
} 
0

嘗試刪除您final markerView mView = new markerView(con, 150, x, y);