Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 触摸事件在自定义扩展视图中不起作用_Java_Android - Fatal编程技术网

Java 触摸事件在自定义扩展视图中不起作用

Java 触摸事件在自定义扩展视图中不起作用,java,android,Java,Android,我有Activity.java和PaintView扩展了视图实现OnTouchListener接口。在这个程序中,我必须点击按钮粉红色和蓝色背景按钮,选择一个形状并拖动到视图区域 我需要帮助,这几天我一直在努力 MainActivity.java package com.easyway2win; import android.app.Activity; import android.content.Context; im

我有Activity.java和PaintView扩展了视图实现OnTouchListener接口。在这个程序中,我必须点击按钮粉红色和蓝色背景按钮,选择一个形状并拖动到视图区域

我需要帮助,这几天我一直在努力

     MainActivity.java
        package com.easyway2win;

        import android.app.Activity;
        import android.content.Context;
        import android.graphics.Color;
        import android.graphics.Paint;
        import android.os.Bundle;
        import android.support.v4.content.ContextCompat;
        import android.util.Log;
        import android.view.View;
        import android.widget.Button;
        import android.widget.TextView;



        public class MainActivity extends Activity {

            private Button butnPink,butnBlue;
            public PaintView paintView = null;

            @Override
            protected void onCreate(Bundle savedInstanceState) {


                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
                butnPink = (Button)findViewById(R.id.pinkColor);
                butnBlue = (Button)findViewById(R.id.blueColor);
                View paintView = (View)findViewById(R.id.view1);
            }

            public void clickMe(View view){
                int intColor = 0;
                String hexColor = null;

                switch(view.getId()){

                case R.id.pinkColor:
                    intColor = getResources().getColor(R.color.pink);

                    hexColor = String.format("#%06X", (0xFFFFFF & intColor));
                    Log.d("Hi", "I am pink color code " + hexColor);

                    break;
                case R.id.blueColor:
                    intColor =  getResources().getColor(R.color.blue);
                  }

                PaintView paintView = new PaintView(this); 
                paintView.setPaintColour(intColor);

            }// end [ clickMe method ]
        }

package com.easyway2win;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.Toast;
PaintView.java

public class PaintView extends View implements OnTouchListener{

    private Paint paint;
    private Path path;

    private Bitmap buffer = null;
    private Canvas penCanvas = null;
    int colour = 0;

    public PaintView(Context context) {
        super(context);
            paint.setAntiAlias(true);
            paint.setColor(Color.WHITE);
            paint.setStyle(Paint.Style.STROKE);
            paint.setStrokeJoin(Paint.Join.ROUND);
            paint.setStrokeWidth(5f);


            // create the Paint and set its color        
            paint = new Paint();*/

           path = new Path();
    }


    public PaintView(Context context, AttributeSet attrs ){
        super(context, attrs);
    }

    public PaintView(Context context, AttributeSet attrs, int defStyle/*Context context, Rect rectangle, Paint paint*/) {
        super(context,attrs,defStyle);
        //  this.rectangle = rectangle;
        //  this.paint = paint;

    }

    public void setPaintColour(int colour){
        paint.setColor(colour);
        //Log.d("Hi", "I am in setPaintColour Method" );
    }

    @Override
    protected void onDraw(Canvas canvas) {
        /*  canvas.drawRect(rectangle,paint);*/
        canvas.drawPath(path, paint);

    }


    @Override
    public boolean onTouch(View v, MotionEvent evt) {

        int action = evt.getAction() & MotionEvent.ACTION_MASK;

        switch (action) {
        case MotionEvent.ACTION_DOWN:{
            //Toast.makeText(getContext(), "Action Down", Toast.LENGTH_LONG);
            //Log.d("Down", "Pointer Down");
            break;
        }

        case MotionEvent.ACTION_POINTER_DOWN : {
            Log.d("CV", "Other point down");
            break;
        }

        case MotionEvent.ACTION_POINTER_UP : {
            Log.d("CV", "Other point up");
            break;
        }

        case MotionEvent.ACTION_UP : {
            Log.d("CV", "Pointer up");
            break;
        }

        }
        return true;
    }

}

在创建绘制对象之前尝试调用绘制对象上的方法时,会发生空指针异常。油漆=新油漆;行需要在PaintView构造函数中提前移动,或者只需在声明它的位置初始化paint即可

public class PaintView extends View implements OnTouchListener{

    private Paint paint;
    // alternate: private Paint paint = new Paint();
    private Path path;

    private Bitmap buffer = null;
    private Canvas penCanvas = null;
    int colour = 0;

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

            // create the Paint and set its color        
            paint = new Paint();*/
            // alternate: skip this line and use the alternate above

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




           path = new Path();
    }

看起来PaintView从未添加到布局中。对象已创建,但未附加到UI中的任何内容。如果有对视图组LinearLayout等的引用,则可以使用addView方法向其添加新视图。如果需要从布局中删除另一个视图,请使用removeView。

请描述您得到的行为,以及它与您希望发生的行为有何不同?在没有上下文的情况下浏览代码,我猜要么A您得到了空引用异常,要么B当单击粉色按钮时似乎没有任何变化,但我的猜测可能是错误的。嗨,我正在将我的squre按钮移动到视图上,然后它会给我有线错误。请引导我。空指针异常Hi我没有收到错误。非常感谢。但我不能移动方形。请,需要你的帮助请任何人都能帮助我。我无法移动drawable/square.xml中定义的方形形状。