Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/402.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 Android:如何使用onDraw()和drawPath?_Java_Android_Draw - Fatal编程技术网

Java Android:如何使用onDraw()和drawPath?

Java Android:如何使用onDraw()和drawPath?,java,android,draw,Java,Android,Draw,我是java和android的新手(通常是面向对象代码的新手)。 我正在做我的第一个项目,这将是一个android锁模式屏幕的克隆,为每个标记的点吐出一个数值 我已经成功地处理了将点更改为标记并在TextView中设置数值的触摸事件,但我不知道如何实现onDraw()在每个标记点之间绘制线。说实话,我真的不明白这个方法是如何构造的,或者传递给它什么。我正在寻找一个简明的解释,甚至是一个我可以使用的傻瓜证明教程。感谢您的帮助 我确信我的代码很难看,效率也很低,这是我最终会清理的。这是我到目前为止所

我是java和android的新手(通常是面向对象代码的新手)。 我正在做我的第一个项目,这将是一个android锁模式屏幕的克隆,为每个标记的点吐出一个数值

我已经成功地处理了将点更改为标记并在TextView中设置数值的触摸事件,但我不知道如何实现onDraw()在每个标记点之间绘制线。说实话,我真的不明白这个方法是如何构造的,或者传递给它什么。我正在寻找一个简明的解释,甚至是一个我可以使用的傻瓜证明教程。感谢您的帮助

我确信我的代码很难看,效率也很低,这是我最终会清理的。这是我到目前为止所拥有的

public class MainActivity extends Activity implements View.OnTouchListener {

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //set an onTouchListener to the RelativeLayout layoutLockWrapper
    ViewGroup lockwrapper = (RelativeLayout) findViewById(R.id.layoutLockWrapper);
    lockwrapper.setOnTouchListener(this);

}

public boolean onTouch(View v, MotionEvent event) {


    //declaring the ImageViews
    ImageView topleft = (ImageView) findViewById(R.id.ivTopLeft);
    ImageView topmid = (ImageView) findViewById(R.id.ivTopMid);
    ImageView topright = (ImageView) findViewById(R.id.ivTopRight);
    ImageView midleft = (ImageView) findViewById(R.id.ivMidLeft);
    ImageView midmid = (ImageView) findViewById(R.id.ivMidMid);
    ImageView midright = (ImageView) findViewById(R.id.ivMidRight);
    ImageView botleft = (ImageView) findViewById(R.id.ivBotLeft);
    ImageView botmid = (ImageView) findViewById(R.id.ivBotMid);
    ImageView botright = (ImageView) findViewById(R.id.ivBotRight);


    // I have a ton of integers here to declare the coordinates of each imageview
    // there's 48 of them so I will leave them out for readability 

    EditText etLockCode = (EditText) findViewById(R.id.etLockcode);

    //strings to get the last value of etLockCode and update with an additional character
    String s = etLockCode.getText().toString();
    String s1 = s+"1";
    String s2 = s+"2";
    String s3 = s+"3";
    String s4 = s+"4";
    String s5 = s+"5";
    String s6 = s+"6";
    String s7 = s+"7";
    String s8 = s+"8";
    String s9 = s+"9";

//case switch for handling touch events on layoutLockWrapper
    switch (event.getAction() & MotionEvent.ACTION_MASK) {
        case MotionEvent.ACTION_DOWN:
            break;
        case MotionEvent.ACTION_UP:
            break;
        case MotionEvent.ACTION_POINTER_UP:
            break;
        case MotionEvent.ACTION_MOVE:

      //logic for switching the buttons source when inside the move path
        float tx = event.getX();
        float ty = event.getY();


        if (tx <= r1 & tx >= l1 & ty >= t1 & ty <= b1 & etLockCode.getTag() != 1) {
            topleft.setImageResource(R.mipmap.checked);

            etLockCode.setText(s1);
            etLockCode.setTag(1);
        } else if (tx <= r2 & tx >= l2 & ty >= t2 & ty <= b2 & etLockCode.getTag() != 2) {
            topmid.setImageResource(R.mipmap.checked);

            etLockCode.setText(s2);
            etLockCode.setTag(2);
        } else if (tx <= r3 & tx >= l3 & ty >= t3 & ty <= b3 & etLockCode.getTag() != 3) {
            topright.setImageResource(R.mipmap.checked);

            etLockCode.setText(s3);
            etLockCode.setTag(3);
        } else if (tx <= r4 & tx >= l4 & ty >= t4 & ty <= b4 & etLockCode.getTag() != 4) {
            midleft.setImageResource(R.mipmap.checked);

            etLockCode.setText(s4);
            etLockCode.setTag(4);
        } else if (tx <= r5 & tx >= l5 & ty >= t5 & ty <= b5 & etLockCode.getTag() != 5) {
            midmid.setImageResource(R.mipmap.checked);

            etLockCode.setText(s5);
            etLockCode.setTag(5);
        } else if (tx <= r6 & tx >= l6 & ty >= t6 & ty <= b6 & etLockCode.getTag() != 6) {
            midright.setImageResource(R.mipmap.checked);

            etLockCode.setText(s6);
            etLockCode.setTag(6);
        } else if (tx <= r7 & tx >= l7 & ty >= t7 & ty <= b7 & etLockCode.getTag() != 7) {
            botleft.setImageResource(R.mipmap.checked);

            etLockCode.setText(s7);
            etLockCode.setTag(7);
        } else if (tx <= r8 & tx >= l8 & ty >= t8 & ty <= b8 & etLockCode.getTag() != 8) {
            botmid.setImageResource(R.mipmap.checked);

            etLockCode.setText(s8);
            etLockCode.setTag(8);
        } else if (tx <= r9 & tx >= l9 & ty >= t9 & ty <= b9 & etLockCode.getTag() != 9) {
            botright.setImageResource(R.mipmap.checked);

            etLockCode.setText(s9);
            etLockCode.setTag(9);
        }
    }

    return true;
    }
}
public类MainActivity扩展活动实现View.OnTouchListener{
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//将onTouchListener设置为RelativeLayout layoutLockWrapper
ViewGroup lockwrapper=(RelativeLayout)findViewById(R.id.layoutLockWrapper);
lockwrapper.setOnTouchListener(this);
}
公共布尔onTouch(视图v,运动事件){
//声明ImageView
ImageView topleft=(ImageView)findViewById(R.id.ivTopLeft);
ImageView topmid=(ImageView)findViewById(R.id.ivTopMid);
ImageView topright=(ImageView)findViewById(R.id.ivTopRight);
ImageView midleft=(ImageView)findViewById(R.id.ivMidLeft);
ImageView midmid=(ImageView)findViewById(R.id.IVMID);
ImageView midright=(ImageView)findViewById(R.id.ivMidRight);
ImageView botleft=(ImageView)findViewById(R.id.ivBotLeft);
ImageView botmid=(ImageView)findViewById(R.id.ivBotMid);
ImageView botright=(ImageView)findViewById(R.id.ivBotRight);
//我这里有很多整数来声明每个imageview的坐标
//其中有48个,为了便于阅读,我将把它们略去
EditText etLockCode=(EditText)findViewById(R.id.etLockCode);
//字符串以获取etLockCode的最后一个值,并使用附加字符进行更新
字符串s=etLockCode.getText().toString();
字符串s1=s+“1”;
字符串s2=s+“2”;
字符串s3=s+“3”;
字符串s4=s+“4”;
字符串s5=s+“5”;
字符串s6=s+“6”;
字符串s7=s+“7”;
字符串s8=s+“8”;
字符串s9=s+“9”;
//用于处理layoutLockWrapper上的触摸事件的机箱开关
开关(event.getAction()&MotionEvent.ACTION\u掩码){
case MotionEvent.ACTION\u DOWN:
打破
case MotionEvent.ACTION\u UP:
打破
case MotionEvent.ACTION\u指针\u向上:
打破
case MotionEvent.ACTION\u移动:
//在移动路径内切换按钮源的逻辑
float tx=event.getX();
float ty=event.getY();

如果(tx=l1&ty>=t1&ty=t2&ty=t3&ty=t4&ty=t5&ty=t6&ty=t7&ty=t8&ty=t9&ty…这是您想要的,尤其是第二节课,但最好阅读所有内容…谢谢,我将在周一看一看。