-
FrmaeLayout 에서 margin값으로 터치시 움직이기.....과거...../개발일지 2010. 8. 8. 09:31
한번 테스트 할게 있어 따로 빼서 작성해 본 소스입니다.
하지만 정확한 포인트을 못잡아서... 대략 난감하게...임의로 수치를 부여한 부분 이 있습니다.
( 터치 시작시 미세한 도형의 이동......혹시 이부분 아시거나 수정하신 분이 있으면 .... 댓글좀.....~~)
밑에 소스와 전체 프로젝트 통째로 첨부 해 봅니다.
(움직임은 가로 만 적용되게 해놓았습니다.)
package com.android_test;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.FrameLayout.LayoutParams;
import android.widget.ImageView.ScaleType;public class MainActivity extends Activity {
FrameLayout frameLayout;
LayoutParams layoutParams;
ImageView imageView;
TextView textView01;int touchX;
int allMargin;
Boolean mTouchStart=false;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
textView01 = (TextView)findViewById(R.id.textView01);
imageView = new ImageView(this);
imageView.setImageResource(R.drawable.squre);
imageView.setScaleType(ScaleType.MATRIX);frameLayout = (FrameLayout) findViewById(R.id.layout);
layoutParams = new LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT);layoutParams.gravity = Gravity.LEFT;
layoutParams.leftMargin = 60;
layoutParams.topMargin = 20;
allMargin = layoutParams.leftMargin;frameLayout.addView(imageView, layoutParams);
Log.i("aaaaaaaaaaaaaaaa","Dfdf" + imageView.getId());imageView.setOnTouchListener(listener);
}OnTouchListener listener = new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
Float x=null;
x = event.getX();
Log.i("v.getId()", "d + " + v.getId() + "a + " + v.getId());if (v.getId() == imageView.getId()) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
startDrag(x);
break;
}
}
return false;
}
};
void startDrag(float x){
touchX= (int)x;
mTouchStart = true;
imageView.setOnTouchListener(null);}
void doDrag(float x){
int aTouchX;
//aTouchX = touchX - (int)x ;
Log.i("touxh", "b " + x);
layoutParams.leftMargin = (int)x-38; //Something strange...TT(I can't fix the this point....)
Log.i("doDramg","dff" + layoutParams.leftMargin);
imageView.setLayoutParams(layoutParams);
}
void StopDrag(){
mTouchStart = false;
imageView.setOnTouchListener(listener);
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
super.dispatchTouchEvent(ev);
float x;
x = ev.getX();
Log.i("x","x + " + x);
if(mTouchStart == false){
return false;
}
switch(ev.getAction()){
case MotionEvent.ACTION_MOVE:
doDrag(x);
break;
case MotionEvent.ACTION_UP:
allMargin = (int)x;
StopDrag();
break;
}
return false;
}
}