Android 在整个屏幕上移动文本视图
我已经开发了一个应用程序,它以完整的尖叫声显示时间。在屏幕中部显示小时、分钟和秒。所以我的目标是,当我长时间点击任何一个文本视图时,能够在整个屏幕上浏览它,并将它放在我想要的地方 我试图找到一个合适的代码来应用到我的应用程序中,我找到了一个代码,可以将文本转换为图像,然后移动该图像。但问题是,文本每秒钟都在更新,所以我认为每秒创建图像不是一个好主意 有人知道一种可以在整个屏幕上移动文本视图的方法吗??? 这是我的一个文本视图Android 在整个屏幕上移动文本视图,android,textview,screen,onlongclicklistener,Android,Textview,Screen,Onlongclicklistener,我已经开发了一个应用程序,它以完整的尖叫声显示时间。在屏幕中部显示小时、分钟和秒。所以我的目标是,当我长时间点击任何一个文本视图时,能够在整个屏幕上浏览它,并将它放在我想要的地方 我试图找到一个合适的代码来应用到我的应用程序中,我找到了一个代码,可以将文本转换为图像,然后移动该图像。但问题是,文本每秒钟都在更新,所以我认为每秒创建图像不是一个好主意 有人知道一种可以在整个屏幕上移动文本视图的方法吗??? 这是我的一个文本视图 private TextView txtHour; txtHour
private TextView txtHour;
txtHour = (TextView)findViewById(R.id.TxtHour);
txtHour.setOnLongClickListener(new OnLongClickListener{
....
我不知道要补充什么请帮忙
编辑:根据第一个答案,我的代码应该是这样的吗
txtHour.setOnLongClickListener(new OnLongClickListener() {
public void onLongClick(View v){
public void drag(MotionEvent event, View v)
{
RelativeLayout.LayoutParams params = (android.widget.RelativeLayout.LayoutParams) v.getLayoutParams();
switch(event.getAction())
{
case MotionEvent.ACTION_MOVE:
{
params.topMargin = (int)event.getRawY() - (v.getHeight());
params.leftMargin = (int)event.getRawX() - (v.getWidth()/2);
v.setLayoutParams(params);
break;
}
case MotionEvent.ACTION_UP:
{
params.topMargin = (int)event.getRawY() - (v.getHeight());
params.leftMargin = (int)event.getRawX() - (v.getWidth()/2);
v.setLayoutParams(params);
break;
}
case MotionEvent.ACTION_DOWN:
{
v.setLayoutParams(params);
break;
}
}
}});
编辑2:最后这是结果代码,可以吗
package com.iamaner.T2Speech;
//imports
public class MAINActivity extends Activity{
private TextView txtHour;
private TextView txtMinutes;
private TextView txtSeconds;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
txtHour = (TextView)findViewById(R.id.TxtHour);
txtMinutes = (TextView)findViewById(R.id.TxtMinute);
txtSeconds = (TextView)findViewById(R.id.TxtSeconds);
txtHour.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
drag(event, v);
return false;
}});
}
public void drag(MotionEvent event, View v)
{
FrameLayout.LayoutParams params = (android.widget.FrameLayout.LayoutParams) v.getLayoutParams();
switch(event.getAction())
{
case MotionEvent.ACTION_MOVE:
{params.topMargin = (int)event.getRawY() - (v.getHeight());
params.leftMargin = (int)event.getRawX() - (v.getWidth()/2);
v.setLayoutParams(params);
break;}
case MotionEvent.ACTION_UP:
{params.topMargin = (int)event.getRawY() - (v.getHeight());
params.leftMargin = (int)event.getRawX() - (v.getWidth()/2);
v.setLayoutParams(params);
break;}
case MotionEvent.ACTION_DOWN:
{v.setLayoutParams(params);
break;}
}}
}
这个框架布局呢
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/your_layout"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<TextView
android:id="@+id/TxtHour"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="15mm"
android:textColor="#000000"/>
<TextView
android:id="@+id/TxtPoints1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/separator"
android:textSize="15mm"
android:textColor="#000000"
android:layout_gravity="center"
android:gravity="center"/>
<TextView
android:id="@+id/TxtMinute"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="15mm"
android:textColor="#000000"
android:layout_gravity="center"
android:gravity="center" />
<TextView
android:id="@+id/TxtPoints2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/separator"
android:textSize="15mm"
android:textColor="#000000"
android:layout_gravity="center"
android:gravity="center"/>
<TextView
android:id="@+id/TxtSeconds"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="15mm"
android:textColor="#000000"
android:layout_gravity="bottom|right" />
</FrameLayout>
将此方法复制到您的类中,并在textview的ontouch中调用它。这里我假设您使用Framelayout。如果没有,请相应地更改布局参数
将此方法复制到您的类中,并在textview的ontouch中调用它。这里我假设您使用Framelayout。如果没有,请相应地更改布局参数。将此添加到onCreate中:最好使用FrameLayout本身
txtHour.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
drag(event, v);
return false;
}
});
这是你的活动类在任何方法之外
public void drag(MotionEvent event, View v)
{
RelativeLayout.LayoutParams params = (android.widget.RelativeLayout.LayoutParams) v.getLayoutParams();
switch(event.getAction())
{
case MotionEvent.ACTION_MOVE:
{
params.topMargin = (int)event.getRawY() - (v.getHeight());
params.leftMargin = (int)event.getRawX() - (v.getWidth()/2);
v.setLayoutParams(params);
break;
}
case MotionEvent.ACTION_UP:
{
params.topMargin = (int)event.getRawY() - (v.getHeight());
params.leftMargin = (int)event.getRawX() - (v.getWidth()/2);
v.setLayoutParams(params);
break;
}
case MotionEvent.ACTION_DOWN:
{
v.setLayoutParams(params);
break;
}
}
将此添加到onCreate:更好地使用FrameLayout本身
txtHour.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
drag(event, v);
return false;
}
});
这是你的活动类在任何方法之外
public void drag(MotionEvent event, View v)
{
RelativeLayout.LayoutParams params = (android.widget.RelativeLayout.LayoutParams) v.getLayoutParams();
switch(event.getAction())
{
case MotionEvent.ACTION_MOVE:
{
params.topMargin = (int)event.getRawY() - (v.getHeight());
params.leftMargin = (int)event.getRawX() - (v.getWidth()/2);
v.setLayoutParams(params);
break;
}
case MotionEvent.ACTION_UP:
{
params.topMargin = (int)event.getRawY() - (v.getHeight());
params.leftMargin = (int)event.getRawX() - (v.getWidth()/2);
v.setLayoutParams(params);
break;
}
case MotionEvent.ACTION_DOWN:
{
v.setLayoutParams(params);
break;
}
}
检查此类似问题检查此类似问题谢谢!但是它显示了错误:方法dragMotionEvent,从类型new View中查看。OnLongClickListener{}从未在本地使用过,有什么帮助吗?请参阅第一条消息中的编辑,我使用的是相对布局…那么,这样可以吗?如果使用相对布局,则必须将所有内容与边界关联,而不是与任何视图关联。然后应用边距。最好使用framelayout,或者绝对布局是不推荐的。顺便说一下,在onTouch视图中调用它。是的,你需要在这里。嗨,我又来了。。。这种方法与ICS兼容吗??我问这个问题是因为我最近把手机升级到了ICS,现在我只能垂直移动文本视图。真奇怪!我不确定abt ICS,同一个apk在较低的版本中工作正常吗?谢谢!但是它显示了错误:方法dragMotionEvent,从类型new View中查看。OnLongClickListener{}从未在本地使用过,有什么帮助吗?请参阅第一条消息中的编辑,我使用的是相对布局…那么,这样可以吗?如果使用相对布局,则必须将所有内容与边界关联,而不是与任何视图关联。然后应用边距。最好使用framelayout,或者绝对布局是不推荐的。顺便说一下,在onTouch视图中调用它。是的,你需要在这里。嗨,我又来了。。。这种方法与ICS兼容吗??我问这个问题是因为我最近把手机升级到了ICS,现在我只能垂直移动文本视图。真奇怪!我不确定abt ICS,同一个apk在较低的版本中工作正常吗?我从所有视图中删除了android:gravity和android:layout_gravity线。。。。没有工作,所有的号码都放在同一个网站上,无法读取。。。有什么想法吗???谢谢我做了更多的调查,我把Log.I函数放在每个案例中。。。问题是拖动被正确调用,然后action\u down案例显示log,但acion\u move和action\u up不会生成任何日志。。。。请帮忙!!!真奇怪你也在使用onlongclick侦听器吗?不,现在我在使用ontouchlistener,就像在edit2中一样。。。我正在寻找为什么actionup和actionmove不被称为。。。我发现了一些关于使用invalidate或return true。。。。你觉得怎么样???嗯…是的!!!!!!!!!!!!!成功了,谢谢!!!!刚在ontouch中返回true而不是false…我从所有视图中删除了android:gravity和android:layout\u gravity线。。。。没有工作,所有的号码都放在同一个网站上,无法读取。。。有什么想法吗???谢谢我做了更多的调查,我把Log.I函数放在每个案例中。。。问题是拖动被正确调用,然后action\u down案例显示log,但acion\u move和action\u up不会生成任何日志。。。。请帮忙!!!真奇怪你也在使用onlongclick侦听器吗?不,现在我在使用ontouchlistener,就像在edit2中一样。。。我正在寻找为什么actionup和actionmove不被称为。。。我发现了一些关于使用invalidate或return true。。。。你觉得怎么样???嗯…是的!!!!!!!!!!!!!成功了,谢谢!!!!刚在ontouch中返回true而不是false。。。