使用 FrameLayout 佈局,單點觸控來動態移動 TextVeiw 的範例

/*
使用 FrameLayout 佈局,單點觸控來動態移動 TextVeiw 的範例

方法一:
    tv = (TextView)findViewById(R.id.textView1);
    FrameLayout.LayoutParams lay_params = (FrameLayout.LayoutParams)tv.getLayoutParams();
    lay_params.setMargins(left, top, right, bottom);
    tv.setLayoutParams(params);
    
方法二:
    tv = (TextView)findViewById(R.id.textView1);
    tv.setPadding(left, top, right, bottom);
*/


package com.ccc.app03;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.*;
import android.widget.*;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.TextView;
import android.view.ViewGroup.LayoutParams;


public class MainActivity extends Activity {

    private float t_X;
    private float t_Y;
    private TextView tv ;
   

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

        // 取得 TextView 物件,id為textView1
        tv = (TextView)findViewById(R.id.textView1);

    }


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



    // 利用 MotionEvent 處理觸控程序
    public boolean onTouchEvent(MotionEvent event) {

        t_X = event.getX();       // 觸控點的 X 軸位置
        t_Y = event.getY() -50;   // 觸控點的 Y 軸位置,減50是為了更接近觸控點
         
          //getRawX,getRawY 相對於螢幕位置坐標;getX,getY 相對於容器上的位置坐標

          //設定物件變數lay_params並初始化
        FrameLayout.LayoutParams lay_params = (FrameLayout.LayoutParams)tv.getLayoutParams();

        // 判斷觸控的動作
        switch( event.getAction() ) {

            case MotionEvent.ACTION_DOWN:  // 按下
               
                    //動態設定textView1的位置
                lay_params.setMargins((int)t_X,(int)t_Y,0,0);
                    tv.setLayoutParams(params);
                   
                break;

            case MotionEvent.ACTION_MOVE:  // 拖曳移動

                //動態設定textView1的位置
                lay_params.setMargins((int)t_X,(int)t_Y,0,0);
                    tv.setLayoutParams(params);
                   
                break;

            case MotionEvent.ACTION_UP:  // 放開

                //動態設定textView1的位置
                lay_params.setMargins((int)t_X,(int)t_Y,0,0);
                    tv.setLayoutParams(params);
                   
                break;
                   
        } //Switch End
         
    }   //onTouchEvent() End


}