Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/208.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在整个屏幕上移动文本视图_Android_Textview_Screen_Onlongclicklistener - Fatal编程技术网

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。。。