0

基本的に私の質問は、 ?を移動するだけでなく、完全に移動する方法です。viewcanvas*習慣がviewあり、 だけでなく全体を動かしたいcanvas*

これは私が試したものですが、NullPointerException(コードは完全ではありません。最も関連性の高い部分だと思うものを入れました。また、カスタムの親viewは a ですLinearLayout):

ResistorView クラス:

LinearLayout root;

public class ResistorView extends View{

    public ResistorView(Context context){
        super(context);         
        root = (LinearLayout)findViewById(R.id.main);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {        

    final int X = (int) event.getRawX();
    final int Y = (int) event.getRawY();
    switch (event.getAction() & MotionEvent.ACTION_MASK) {
        case MotionEvent.ACTION_DOWN:
            LinearLayout.LayoutParams lParams = (LinearLayout.LayoutParams) this.getLayoutParams();
            _xDelta = X - lParams.leftMargin;
            _yDelta = Y - lParams.topMargin;
            break;
        case MotionEvent.ACTION_UP:
            break;
        case MotionEvent.ACTION_POINTER_DOWN:
            break;
        case MotionEvent.ACTION_POINTER_UP:
            break;
        case MotionEvent.ACTION_MOVE:
            LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) this.getLayoutParams();
            layoutParams.leftMargin = X - _xDelta;
            layoutParams.topMargin = Y - _yDelta;
            layoutParams.rightMargin = -250;
            layoutParams.bottomMargin = -250;
            this.setLayoutParams(layoutParams);
            break;
    }
    root.invalidate(); //There is a NullPointerException on this line.
    return true;
    }

メインレイアウト:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"        
    android:orientation="vertical"
    android:id="@+id/main">

<TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/hello" />

<Button
    android:id="@+id/bAdd"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"        
    android:text="Add RES" />


</LinearLayout>

誰かが助けてくれれば、私は本当に感謝しています。ありがとう。

4

2 に答える 2

0

変化する

root = (LinearLayout)findViewById(R.id.main);

root = (LinearLayout)getParent();

代わりに onTouch 内でこれを行い、コンストラクターから削除することもできます。たとえば、次のようになります。

if(root == null) {
    root = (LinearLayout)getParent();
}
root.invalidate();
于 2012-07-10T19:34:01.210 に答える