0

我需要你的幫助與Android自定義視圖和方法getX()getY():我想繪製一個簡單的圓view.getX()和view.getY( ),但圓圈並沒有像我預期的那樣位於左上角。見下面的圖片(自定義視圖是綠色矩形):Android的getX和getY的自定義視圖:奇怪的行爲

My custom view

這是我的自定義視圖代碼:

import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.util.AttributeSet; 
import android.util.Log; 
import android.view.View; 


public class PlotterView extends View { 

    private Paint paint; 
    public PlotterView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     paint = new Paint(); 
     paint.setColor(Color.BLUE); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 

     canvas.drawCircle(this.getX(), this.getY(),5, paint); 

    } 
} 

這是整個佈局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" 
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:orientation="vertical" 
    tools:context="calc.PlotFunctionActivity"> 

    <calc.PlotterView 
     android:id="@+id/plotter" 
     android:padding="0dp" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:background="#00FF00" 
     android:layout_weight="8"/> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:orientation="horizontal" 
     android:layout_weight="2"> 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="match_parent" 
      android:textSize="@dimen/plot_text_size" 
      android:text="f(x)=" 
      android:gravity="center_vertical|end"/> 
     <EditText 
      android:id="@+id/function" 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:textSize="@dimen/plot_text_size" 
      android:layout_weight="4" 
      android:gravity="center_vertical|start"/> 
     <Button 
      android:id="@+id/plot" 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:textSize="@dimen/plot_text_size" 
      android:layout_weight="2" 
      android:text="@string/plot_button_label"/> 
     </LinearLayout> 

</LinearLayout> 

有什麼建議嗎?先謝謝你。

+1

使用0代替getX(),getY()繪製圓時 – pskink 2014-12-02 13:52:36

+0

getX和getY不返回View的左上角嗎? – superpuccio 2014-12-02 13:54:24

+0

是的,在父,但帆布被翻譯所以0,0是一個左上角的視圖 – pskink 2014-12-02 13:57:40

回答

1

pskink是完全正確的,你的填充設置爲你的「基地」的LinearLayout您的圖形視圖,所以當你調用getX()它返回你plotview的位置在其父佈局(您的基地的LinearLayout)里程碑(東西相當於16DP)。

然後,當您繪製圓時,您將在plotview界標中設置圓心,以使綠色視圖的左上角爲(0,0)。現在,您可以在baselayout-plotview和plotview-circle中心之間看到相同的翻譯。