2015-10-04 30 views
1

我是新來的android和我想調用一個方法,移動一個自定義視圖使用畫布10個像素繪製一個圓。當我嘗試調用所說的方法時,我得到一個空指針異常,我無法弄清楚爲什麼。這是我的。Android - 獲取空指針異常時調用自定義View方法

主要活動

public class CustomView extends Activity { 
XView xv; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_customview); 
} 

public void moveUp(View view){ 
    xv.setY(view); 
} 

} 

自定義視圖

public class XView extends View implements View.OnClickListener{ 

private Paint mPaint = new Paint(); 
int oX = 200; 
int oY = 200; 


public XView(Context context, AttributeSet attrs){ 
    super(context, attrs); 
    //setOnClickListener(this); 
} 



@Override 
protected void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 
    mPaint.setStyle(Paint.Style.FILL); 
    mPaint.setColor(Color.MAGENTA); 

    canvas.drawColor(Color.WHITE); 
    canvas.drawCircle(oX, oY, 50, mPaint); 
} 
public void onClick(View view){ 
    oX=oX+10; 
    view.postInvalidate(); 
} 


public void setY(View view) 
{ 
    oY=oY+10; 
    view.postInvalidate(); 
} 
} 

的XML的主要活動

<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" tools:context=".customview" 
android:orientation="vertical"> 

<com.mycompany.customview.XView 
    android:layout_width="wrap_content" 
    android:layout_height="200dp" /> 


<RelativeLayout 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal" 
     android:layout_alignParentTop="true" 
     android:layout_alignLeft="@+id/button2" 
     android:layout_alignStart="@+id/button2" 
     android:onClick="moveUp"/> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="right" 
     android:layout_alignTop="@+id/button2" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" /> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignTop="@+id/button" 
     android:layout_centerHorizontal="true" 
     android:id="@+id/button2" /> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal" 
     android:layout_centerVertical="true" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentEnd="true" 
     android:id="@+id/button" /> 
    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal" 
     android:id="@+id/button5" 
     android:layout_alignParentBottom="true" 
     android:layout_alignLeft="@+id/button2" 
     android:layout_alignStart="@+id/button2" /> 
</RelativeLayout> 

感謝

回答

3

你需要一個ID添加到您的自定義視圖中的XML:

<com.mycompany.customview.XView 
    android:id="@+id/xvview_id" 
    android:layout_width="wrap_content" 
    android:layout_height="200dp" /> 

,並使用findViewById初始化您的會員

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_customview); 
    xv = (XView) findViewById(R.id.xvview_id); 
} 

當你調用setContentView,Android的 「補充」,小部件您在佈局中將其聲明爲Activity的視圖層次結構的一部分,使其在當前活動的上下文中可供您使用。你要做的只是撥打findViewById來獲取你想要使用的小工具的參考

+0

謝謝你做到了。 – user798774

+0

如果通過代碼添加自定義視圖並且它不在佈局XML中,該怎麼辦? –

相關問題