gpt4 book ai didi

java - 安卓按钮不动了?

转载 作者:行者123 更新时间:2023-12-01 11:03:03 26 4
gpt4 key购买 nike

我正在遵循在线教程,使按钮改变位置(从左上角到右下角),同时增加尺寸。我正在使用 TransitionManager 执行此操作。

TransitionManager.beginDelayedTransition(mylayout);

然后我想知道我是否也可以从右下角到左上角制作动画(这没有包含在教程中,我只是出于纯粹的好奇而尝试这样做)。我创建了另一个名为

的方法
moveButtonBack();

每次调用 moveButton 或 moveButtonBack() 时,x 变量都会加一,如果 x 为偶数,则调用 moveButton,而如果 x 为奇数,则调用 moveButtonBack。顺便说一下,我在代码中添加了很多注释来跟踪事情。为了在 moveButtonBack 中重新更改按钮大小,我使用变量 H 和 W 来表示所显示按钮的第一个高度和宽度。

问题

对我来说,代码看起来不错,但我无法找出问题所在。当我在手机上运行这个程序时,按钮的行为很疯狂。按钮上的文本快速变化,并且它以无组织的方式移动,要么当我触摸时移动到中心,当我放开时移动到顶部/底部,或者它停留在中心并且看起来好像在振动(快速上下移动)。它的高度恒定为300,宽度恒定为450,而不是缩小和放大。我不知道问题是什么,如果能得到帮助,我将不胜感激。我花了一个多小时在代码中插入注释,并尝试通过更改监听器、高度等内容来解决问题。

    package com.example.my.transitions;

import android.nfc.Tag;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.*;
import android.widget.*;
import android.transition.*;
import android.support.v7.app.*;

public class MainActivity extends AppCompatActivity {

ViewGroup myslayout;
View mysButton; //Used in move and moveback
int x = 0;
double h;
double w;

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

myslayout = (ViewGroup) findViewById(R.id.myslayoutid);

myslayout.setOnTouchListener(
new RelativeLayout.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {

if (x%2 == 0) {

moveButton();
return true;

}
else{

moveButtonBack();
return true;
}

return true; //touch listener as been handled
}
}
);
}

public void moveButton() {
Button mysButton = (Button) findViewById(R.id.mysbuttonid);

h = mysButton.getHeight();
w = mysButton.getWidth();


TransitionManager.beginDelayedTransition(myslayout);

//////////////////////Change position of button////////////////////////////


RelativeLayout.LayoutParams positionRules = new RelativeLayout.LayoutParams(

RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);

positionRules.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, RelativeLayout.ALIGN_PARENT_BOTTOM);

positionRules.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, RelativeLayout.ALIGN_PARENT_RIGHT);


mysButton.setLayoutParams(positionRules);

/////////////////////////Change size of button////////////////////////////


ViewGroup.LayoutParams sizerules = mysButton.getLayoutParams();
sizerules.width = 450;
sizerules.height = 300;

mysButton.setLayoutParams(sizerules);

mysButton.setText("Height: " + sizerules.height + "Width: " + sizerules.width);
x++; //Make x odd, to be called as moveButtonBack next time
}

public void moveButtonBack(){
Button mysButton =(Button) findViewById(R.id.mysbuttonid);
TransitionManager.beginDelayedTransition(myslayout);

RelativeLayout.LayoutParams positionBackRules = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);

positionBackRules.addRule(RelativeLayout.ALIGN_PARENT_TOP, RelativeLayout.ALIGN_PARENT_TOP);
positionBackRules.addRule(RelativeLayout.ALIGN_PARENT_LEFT, RelativeLayout.ALIGN_PARENT_LEFT); //Move back to top left

mysButton.setLayoutParams(positionBackRules);

ViewGroup.LayoutParams sizebackrules = mysButton.getLayoutParams();
sizebackrules.height = (int) h;
sizebackrules.width = (int) w;
//I am typcasting h and w into ints in case it is a double, since .width and .height only take ints.

mysButton.setLayoutParams(sizebackrules);

mysButton.setText("Height: " + sizebackrules.height + "Width: " + sizebackrules.width + "h " + h + "w" + w);

x++; //Make x even again


}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();

//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}

return super.onOptionsItemSelected(item);
}
}

再次,我非常感谢您的回答,因为我已经研究这个问题几个小时了!

最佳答案

在您的 onTouch 方法中检查它是触地还是触地。仅为这些事件之一编写移动按钮逻辑。

例如:

if (event.getAction() == MotionEvent.ACTION_DOWN) {
// Code for Move button / Move button back
}

有关 Android Documentation 的更多详细信息

关于按钮大小不变的问题:将 hw 的计算移至 Activity 的 onCreate 方法可能会有所帮助。

关于java - 安卓按钮不动了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33192087/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com