imageView android中的可移动文本视图
我正在尝试在android上拖动和调整大小的textview内部图像。我可以在触摸TextView时拖动,但它会拖到屏幕之外。你能帮我在图像中拖动TextView吗。代码在这里imageView android中的可移动文本视图,android,draggable,textview,Android,Draggable,Textview,我正在尝试在android上拖动和调整大小的textview内部图像。我可以在触摸TextView时拖动,但它会拖到屏幕之外。你能帮我在图像中拖动TextView吗。代码在这里 public void drag(MotionEvent event, View v){ RelativeLayout.LayoutParams params = (android.widget.RelativeLayout.LayoutParams) v.getLayoutParams(); s
public void drag(MotionEvent event, View v){
RelativeLayout.LayoutParams params = (android.widget.RelativeLayout.LayoutParams) v.getLayoutParams();
switch(event.getAction())
{
case MotionEvent.ACTION_MOVE:
{
Log.v("touch","move");
params.topMargin = (int)event.getRawY() - (textView.getHeight());
params.leftMargin = (int)event.getRawX() - (textView.getWidth()/2);
int y= (int)event.getRawY();
int x=(int)event.getRawX();
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
if(params.topMargin>=0 && params.leftMargin>=0 )
textView.setLayoutParams(params);
break;
}
case MotionEvent.ACTION_UP:
{
Log.v("touch","up");
params.topMargin = (int)event.getRawY() - (textView.getHeight());
params.leftMargin = (int)event.getRawX() - (textView.getWidth()/2);
Log.v("touch", "params.topMargin"+params.topMargin);
Log.v("touch", " params.leftMargin"+ params.leftMargin);
if( ( params.topMargin>=0) && (params.leftMargin>=0))
textView.setLayoutParams(params);
// textView.setLayoutParams(params);
break;
}
case MotionEvent.ACTION_DOWN:
{
textView.setLayoutParams(params);
break;
}
}
}
移动文本视图确实需要拖动吗?您可以扩展TextView,重新定义公共布尔onTouch(View v,MotionEvent事件),计算其中的offsetX和offsetY,添加接口,例如OnPositionChangeListener(int offsetX,int offsetY),并让活动包含此RelativeLayout实现此接口。这对我很有用。
私有void initDragView(){
private void initDragView() {
// text view drag
_root = (ViewGroup) findViewById(R.id.tblDragView);
_root.addView(txtContent);
_root.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getActionMasked()) {
case MotionEvent.ACTION_MOVE:
int x = (int) event.getX() - _xDelta;
int y = (int) event.getY() - _yDelta;
int w = backgroundImageWidth;// getWindowManager().getDefaultDisplay().getWidth();
int h = backgroundImageHeight;// getWindowManager().getDefaultDisplay().getHeight();
if (x < 0 || y < 0 || x > w || y > h)
return false;
if (x > w) {
x = w;
return true;
}
if (y > h) {
// Log.d("TAG", "Ouch i am out side height");
y = h;
return true;
}
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
new ViewGroup.MarginLayoutParams(
RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT));
if (lp.leftMargin < x && lp.topMargin < y)
lp.setMargins(x, y, 0, 0);
// txtContent.setBackgroundColor(getResources().getColor(
// R.color.blue));
txtContent.setLayoutParams(lp);
break;
default:
break;
}
return true;
}
});
txtContent.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getActionMasked()) {
case MotionEvent.ACTION_DOWN:
_xDelta = (int) event.getX();
_yDelta = (int) event.getY();
txtContent = (TextView) v;
break;
default:
break;
}
return false;
}
});
}
//文本视图拖动
_root=(视图组)findViewById(R.id.tblDragView);
_root.addView(txtContent);
_root.setOnTouchListener(新视图.OnTouchListener(){
@凌驾
公共布尔onTouch(视图v,运动事件){
开关(event.getActionMasked()){
case MotionEvent.ACTION\u移动:
int x=(int)event.getX();
int y=(int)event.getY()-\u yDelta;
int w=backgroundImageWidth;//getWindowManager().getDefaultDisplay().getWidth();
int h=backgroundImageHeight;//getWindowManager().getDefaultDisplay().getHeight();
if(x<0 | | y<0 | | x>w | | y>h)
返回false;
如果(x>w){
x=w;
返回true;
}
如果(y>h){
//Log.d(“标签”,“哎哟,我在外侧高度”);
y=h;
返回true;
}
RelativeLayout.LayoutParams lp=新的RelativeLayout.LayoutParams(
新建ViewGroup.MarginLayoutParams(
RelativeLayout.LayoutParams.WRAP_内容,
RelativeLayout.LayoutParams.WRAP_内容);
if(lp.leftMargin