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