Android - 从自定义视图中的 onTouch 方法向 mainActivity 发送信息
Android - send information to the mainActivity from the onTouch method in a Custom View
我有一个自定义视图 (DrawFigures),它有一个 onTouch 方法来执行一系列操作。有一个布局有几个按钮,一个 TextView 和一个 RelativeView 来动态添加自定义视图。然后,在 MainActivity.class 中,我需要在这个自定义视图中调用 onTouch 方法时接收 DrawFigures 中的一些属性的值,以便在 TextView 组件中显示它们。
这里是自定义视图的代码:
public abstract class DrawFigures extends View{
private float value1;
public boolean onTouch(Motion Event){
int action = event.getAction();
if(action==MotionEvent.ACTION_MOVE){
// ... methods that provoke that value1 changes
}else if(action==MotionEvent.ACTION_DOWN){
// ...
}else if(action==MotionEvent.ACTION_UP){
// ...
}
}
// ...
return true;
}
由于 DrawFigures 的 onTouch 方法,我无法在 MainActivity 的 TextView 中接收值 1 来显示它。这个问题怎么解决?在 MianActivity 中实现 OnTouch 方法?怎么做? MainActivity.class 看起来像这样:
public class MainActivity extends Activity implements View.OnTouchListener{
DrawFigures fig;
TextView txtInfo;
// ...
public void btnSecRec(View v){
int id = v.getId();
if (id == R.id.btnSecRec){
RelativeLayout parent = (RelativeLayout)findViewById(R.id.viewDatosSec);
parent.removeAllViews();
fig = new DrawRectangleWithDimensions(this);
fig.setOnTouchListener(this);
fig.setFigure(10, 40);
parent.addView(fig);
}
}
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
if (action == MotionEvent.ACTION_MOVE) {
if (fig.touching == true) {
String value = Float.toString(fig.getChangingDimensionValue());
txtInfo.setText(value);
}
}
return true;
}
}
您可以在 activity 中实现 onTouchListener,并在调用超级 class' onTouchEvent 之后,通过 getter 更新值。像这样:
@Override
public boolean onTouch(final View v, final MotionEvent event) {
super.onTouchEvent(event)
float value1 = fig.getUpdatedValues()
return true;
}
记得在 activity
中为该视图分配 OnTouchListener
您可以像这样在非activity class 中将 value1 声明为静态。
static float value1;
然后像这样获取 Activity class 中的值:
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
String value = Double.toString(DrawFigures.value1);
if (action == MotionEvent.ACTION_MOVE) {
if (fig.touching == true) {
String value = Float.toString(fig.getChangingDimensionValue());
txtInfoc.setText(value);
}
}
或者由于您的值是私有的,您可以使用 setter
和 getter
方法通过 DrawFigures 对象设置和检索值,然后您可以在整个应用程序中使用它。
如果你想让值持久化,可以使用SharedPreferences
经过一段时间的尝试,我找到了解决办法。只需使用 MainActivity 的 onTouch 方法中的实例 "fig" 调用 DrawFigures class 中的 onTouchEvent 方法。
我要感谢花时间帮助的人,谢谢!
代码如下:
public class MainActivity extends Activity implements View.OnTouchListener{
DrawFigures fig;
TextView txtInfo;
// ...
public void btnSecRec(View v){
int id = v.getId();
if (id == R.id.btnSecRec){
RelativeLayout parent = (RelativeLayout)findViewById(R.id.viewDatosSec);
parent.removeAllViews();
fig = new DrawRectangleWithDimensions(this);
fig.setOnTouchListener(this);
fig.setFigure(10, 40);
parent.addView(fig);
}
}
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
fig.onTouchEvent(event);
if (action == MotionEvent.ACTION_MOVE) {
if (fig.touching == true) {
String value = Float.toString(fig.getChangingDimensionValue());
txtInfo.setText(value);
}
}
return true;
}
}
我有一个自定义视图 (DrawFigures),它有一个 onTouch 方法来执行一系列操作。有一个布局有几个按钮,一个 TextView 和一个 RelativeView 来动态添加自定义视图。然后,在 MainActivity.class 中,我需要在这个自定义视图中调用 onTouch 方法时接收 DrawFigures 中的一些属性的值,以便在 TextView 组件中显示它们。
这里是自定义视图的代码:
public abstract class DrawFigures extends View{
private float value1;
public boolean onTouch(Motion Event){
int action = event.getAction();
if(action==MotionEvent.ACTION_MOVE){
// ... methods that provoke that value1 changes
}else if(action==MotionEvent.ACTION_DOWN){
// ...
}else if(action==MotionEvent.ACTION_UP){
// ...
}
}
// ...
return true;
}
由于 DrawFigures 的 onTouch 方法,我无法在 MainActivity 的 TextView 中接收值 1 来显示它。这个问题怎么解决?在 MianActivity 中实现 OnTouch 方法?怎么做? MainActivity.class 看起来像这样:
public class MainActivity extends Activity implements View.OnTouchListener{
DrawFigures fig;
TextView txtInfo;
// ...
public void btnSecRec(View v){
int id = v.getId();
if (id == R.id.btnSecRec){
RelativeLayout parent = (RelativeLayout)findViewById(R.id.viewDatosSec);
parent.removeAllViews();
fig = new DrawRectangleWithDimensions(this);
fig.setOnTouchListener(this);
fig.setFigure(10, 40);
parent.addView(fig);
}
}
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
if (action == MotionEvent.ACTION_MOVE) {
if (fig.touching == true) {
String value = Float.toString(fig.getChangingDimensionValue());
txtInfo.setText(value);
}
}
return true;
}
}
您可以在 activity 中实现 onTouchListener,并在调用超级 class' onTouchEvent 之后,通过 getter 更新值。像这样:
@Override
public boolean onTouch(final View v, final MotionEvent event) {
super.onTouchEvent(event)
float value1 = fig.getUpdatedValues()
return true;
}
记得在 activity
中为该视图分配 OnTouchListener您可以像这样在非activity class 中将 value1 声明为静态。
static float value1;
然后像这样获取 Activity class 中的值:
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
String value = Double.toString(DrawFigures.value1);
if (action == MotionEvent.ACTION_MOVE) {
if (fig.touching == true) {
String value = Float.toString(fig.getChangingDimensionValue());
txtInfoc.setText(value);
}
}
或者由于您的值是私有的,您可以使用 setter
和 getter
方法通过 DrawFigures 对象设置和检索值,然后您可以在整个应用程序中使用它。
如果你想让值持久化,可以使用SharedPreferences
经过一段时间的尝试,我找到了解决办法。只需使用 MainActivity 的 onTouch 方法中的实例 "fig" 调用 DrawFigures class 中的 onTouchEvent 方法。
我要感谢花时间帮助的人,谢谢!
代码如下:
public class MainActivity extends Activity implements View.OnTouchListener{
DrawFigures fig;
TextView txtInfo;
// ...
public void btnSecRec(View v){
int id = v.getId();
if (id == R.id.btnSecRec){
RelativeLayout parent = (RelativeLayout)findViewById(R.id.viewDatosSec);
parent.removeAllViews();
fig = new DrawRectangleWithDimensions(this);
fig.setOnTouchListener(this);
fig.setFigure(10, 40);
parent.addView(fig);
}
}
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
fig.onTouchEvent(event);
if (action == MotionEvent.ACTION_MOVE) {
if (fig.touching == true) {
String value = Float.toString(fig.getChangingDimensionValue());
txtInfo.setText(value);
}
}
return true;
}
}