问题描述
我创建了这种数字键盘,可以使用它而无需使用OnTouchListener函数从屏幕上抬起手指,并且在输入每个按钮时实现了振动。但是,我有两个问题:退出一个按钮时出现振动,而不是在屏幕的白色部分中进入另一个按钮。第二个问题是在退出并重新进入按钮时实现振动。有人可以帮我吗?
MainActivity
public class MainActivity extends AppCompatActivity {
MyButton b1,b2,b3,b4,b5,b6,b7,b8,b9;
TextView number;
RelativeLayout relativeLayout;
long[] pattern = {0,200};
long[] pattern1 = {0,100,50,100};
private Button mLastButton;
private final static int[] STATE_pressed = {android.R.attr.state_pressed,android.R.attr.state_focused | android.R.attr.state_enabled };
private static int defaultStates[];
MotionEvent evento;
private Rect rect;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
b1 = findViewById(R.id.n1);
b2 = findViewById(R.id.n2);
b3 = findViewById(R.id.n3);
b4 = findViewById(R.id.n4);
b5 = findViewById(R.id.n5);
b6 = findViewById(R.id.n6);
b7 = findViewById(R.id.n7);
b8 = findViewById(R.id.n8);
b9 = findViewById(R.id.n9);
number = findViewById(R.id.editTextPhone);
relativeLayout = findViewById(R.id.relativelayout);
defaultStates = b1.getBackground().getState();
relativeLayout.setonTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v,MotionEvent event) {
int x = (int) event.getX();
int y = (int) event.getY();
for (int i = 0; i < relativeLayout.getChildCount(); i++) {
View current = relativeLayout.getChildAt(i);
if (current instanceof Button) {
Button b = (Button) current;
if (!isPointWithin(x,y,b.getLeft(),b.getRight(),b.getTop(),b.getBottom())) {
b.getBackground().setState(defaultStates);
}
if (isPointWithin(x,b.getBottom())) {
b.getBackground().setState(STATE_pressed);
/*
if(b == mLastButton){
//mettere una sola vibrazione
}
*/
if (b != mLastButton) {
if(b==b5){
Vibrator vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
vibrator.vibrate(pattern1,-1);
}else {
Vibrator vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
vibrator.vibrate(pattern,-1);
}
mLastButton = b;
}
if(event.getAction()==MotionEvent.ACTION_UP){
CharSequence Prec = number.getText();
if(b==b1){
number.setText(Prec+"1");
Vibrator vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
vibrator.vibrate(pattern,-1);
}else if(b==b2){
number.setText(Prec+"2");
Vibrator vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
vibrator.vibrate(pattern,-1);
}else if(b==b3){
number.setText(Prec+"3");
Vibrator vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
vibrator.vibrate(pattern,-1);
}else if(b==b4){
number.setText(Prec+"4");
Vibrator vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
vibrator.vibrate(pattern,-1);
}else if(b==b5){
number.setText(Prec+"5");
Vibrator vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
vibrator.vibrate(pattern1,-1);
}else if(b==b6){
number.setText(Prec+"6");
Vibrator vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
vibrator.vibrate(pattern,-1);
}else if(b==b7){
number.setText(Prec+"7");
Vibrator vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
vibrator.vibrate(pattern,-1);
}else if(b==b8){
number.setText(Prec+"8");
Vibrator vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
vibrator.vibrate(pattern,-1);
}else if(b==b9){
number.setText(Prec+"9");
Vibrator vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
vibrator.vibrate(pattern,-1);
}
}
}
}
}
return true;
}
});
}
static boolean isPointWithin(int x,int y,int x1,int x2,int y1,int y2) {
return (x <= x2 && x >= x1 && y <= y2 && y >= y1);
}}
布局XML
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/relativelayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/editTextPhone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_alignParentEnd="true"
android:layout_marginStart="20dp"
android:layout_marginTop="20dp"
android:layout_marginEnd="20dp"
android:ems="10"
android:maxLength="20"
android:textSize="24sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<MyButton
android:id="@+id/n1"
android:layout_width="120dp"
android:layout_height="120dp"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_marginStart="20dp"
android:layout_marginTop="116dp"
android:focusable="true"
android:text="1" />
<MyButton
android:id="@+id/n2"
android:layout_width="120dp"
android:layout_height="120dp"
android:layout_alignParentTop="true"
android:layout_marginTop="116dp"
android:layout_toEndOf="@+id/n1"
android:text="2" />
<MyButton
android:id="@+id/n3"
android:layout_width="120dp"
android:layout_height="120dp"
android:layout_alignParentTop="true"
android:layout_marginTop="116dp"
android:layout_toEndOf="@+id/n2"
android:text="3" />
<MyButton
android:id="@+id/n4"
android:layout_width="120dp"
android:layout_height="120dp"
android:layout_below="@+id/n1"
android:layout_alignParentStart="true"
android:layout_marginStart="20dp"
android:text="4" />
<MyButton
android:id="@+id/n5"
android:layout_width="120dp"
android:layout_height="120dp"
android:layout_below="@+id/n2"
android:layout_toEndOf="@+id/n4"
android:text="5" />
<MyButton
android:id="@+id/n6"
android:layout_width="120dp"
android:layout_height="120dp"
android:layout_below="@+id/n3"
android:layout_toEndOf="@+id/n5"
android:text="6" />
<MyButton
android:id="@+id/n7"
android:layout_width="120dp"
android:layout_height="120dp"
android:layout_below="@+id/n4"
android:layout_alignParentStart="true"
android:layout_marginStart="20dp"
android:text="7" />
<MyButton
android:id="@+id/n8"
android:layout_width="120dp"
android:layout_height="120dp"
android:layout_below="@+id/n5"
android:layout_toEndOf="@+id/n7"
android:text="8" />
<MyButton
android:id="@+id/n9"
android:layout_width="120dp"
android:layout_height="120dp"
android:layout_below="@+id/n6"
android:layout_toEndOf="@+id/n8"
android:text="9" />
MyButton
public class MyButton extends Button {
public MyButton(Context context,AttributeSet attrs,int defStyle) {
super(context,attrs,defStyle);
// Todo Auto-generated constructor stub
}
public MyButton(Context context,AttributeSet attrs) {
super(context,attrs);
// Todo Auto-generated constructor stub
}
public MyButton(Context context) {
super(context);
// // Todo Auto-generated constructor stub
}
@Override
public boolean onTouchEvent(MotionEvent event) {
// Todo Auto-generated method stub
// return super.onTouchEvent(event);
return false;
}}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)