【Java开源代码栏目提醒】:文章导读:在新的一年中,各位网友都进入紧张的学习或是工作阶段。网学会员整理了Java开源代码-CSOW_Shift.java的相关内容供大家参考,祝大家在新的一年里工作和学习顺利!
package org.chapter13;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
enum ActionType {
R, L, D, U
}
public class CSOW_Shift extends Activity {
/** Called when the activity is first created. */
float x,y;
int state;
int deltaRow, deltaCol;
int nowButtonX,nowButtonY,nowSiteX,nowSiteY,lastButtonX,lastButtonY;
String edgeFSM, FSM;
boolean isMoveReset=true, isClick=true;
int w, h;
View btn = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
init();
btn = (BtnView) findViewById(R.id.Button01);
btn.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
state = event.getAction();
if(state==MotionEvent.ACTION_DOWN||state==MotionEvent.ACTION_MOVE){
x=event.getX();//读X坐标
y=event.getY();//读Y坐标
nowcheck(x,y);//设定当前所指Button
if(isMoveReset==true){
nowSiteX=nowButtonX;
nowSiteY=nowButtonY;
isMoveReset=false;
}
if(state==MotionEvent.ACTION_MOVE) {
if(nowSiteX!=nowButtonX||nowSiteY!=nowButtonY) {
lastcheck(x,y);//设定离开所指Button
isClick=false;
deltaRow = nowSiteX - lastButtonX;
deltaCol = nowSiteY - lastButtonY;
forward(); // 检查上、下、左、右
// Highlight two buttons & setTitle
setTitle(edgeFSM);
markButtonFlag(nowSiteX, nowSiteY);
markButtonFlag(lastButtonX, lastButtonY);
v.invalidate(); // 拿掉这行变成无实时性
isMoveReset=true;
if( edgeFSM=="\\" ) //如果方向不对
init();
}
}
else if(state==MotionEvent.ACTION_DOWN) {
// Highlight one button
markButtonFlag(nowButtonX, nowButtonY);
v.invalidate(); // 拿掉这行变成无实时性
}
}
else if(state==MotionEvent.ACTION_UP){//手指离开
if(isClick) {
printText();
init();
}
else {
restates();
isClick=true;
}
isMoveReset=true;
v.invalidate();
}
return true;
} // onTouch
});
}
private void markButtonFlag(int buttonX, int buttonY) {
if(buttonX==0 && buttonY == 0) BtnView.iAreaFocus[0] = 1;
else if(buttonX==0 && buttonY == 1) BtnView.iAreaFocus[1] = 1;
else if(buttonX==1 && buttonY == 0) BtnView.iAreaFocus[2] = 1;
else if(buttonX==1 && buttonY == 1) BtnView.iAreaFocus[3] = 1;
if(edgeFSM.length()>0) {
char dir = edgeFSM.charAt(0);//edgeFSM.length()-1);
System.out.println("dir= "+dir);
for(int i=0; i<BtnView.iAreaColor.length; i++)
if(dir=='R')
BtnView.iAreaColor[i] = Color.YELLOW;
else if(dir=='L')
BtnView.iAreaColor[i] = Color.BLUE;
else if(dir=='D')
BtnView.iAreaColor[i] = Color.GREEN;
else if(dir=='U')
BtnView.iAreaColor[i] = Color.RED;
}
}
public void nowcheck(float x,float y){
double w = btn.getWidth()/2.0;
double h = btn.getHeight()/2.0;
nowButtonX = (int) (y / h);
nowButtonY = (int) (x / w);
};
public void lastcheck(float x,float y){
double w = btn.getWidth()/2.0;
double h = btn.getHeight()/2.0;
lastButtonX = (int) (y / h);
lastButtonY = (int) (x / w);
};
public void forward(){//新一步的计算
if( deltaRow == -1 ) {edgeFSM = "D"; }
else if( deltaRow == 1 ) {edgeFSM = "U"; }
else if( deltaCol == -1 ) {edgeFSM = "R"; }
else if( deltaCol == 1 ) {edgeFSM = "L"; }
else {edgeFSM = "\\";}
};
public void restates(){//判断是否是正确图形,U: Up, D: Down, R: Right, L: Left
try{
switch( ActionType.valueOf( edgeFSM ) ){
case R://右
case L://左
case D://下
case U://上
break;
default:
FSM = "";
}
}catch(IllegalArgumentException e){
FSM = "";
System.out.println( e );
}finally{
printText();
init();
}
};//restates
public void printText(){
if(isClick)
setTitle("Clicking ("+nowButtonX+", "+nowButtonY+")zone");
};//printText
public void init(){
edgeFSM = "";
deltaRow = deltaCol = 0;
nowButtonX=nowButtonY=nowSiteX=nowSiteY=lastButtonX=lastButtonY=2;
};//init
}
上一篇:
CSOW_Oscillation.java
下一篇:
关于听觉掩蔽的语音增强算法及DSP实现