/*
使用 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
}
使用 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
}