在ListView和Gallery等控件中,您可以垂直或水平向一个方向拖动项目。
我有一个TextView,我成功拖动它。但是我想把它向水平方向移动。我该如何实现呢?
谢谢,
我的代码:
public class MyDragShadowBuilder extends View.DragShadowBuilder {
private static View view;
public MyDragShadowBuilder(View v) {
super(v);
view = v;
}
@Override
public void onProvideShadowMetrics(Point size, Point touch) {
width = getView().getWidth();
height = getView().getHeight();
size.set(width, height);
touch.set(width / 2, height / 2);
}
private int width, height;
@Override
public void onDrawShadow(Canvas canvas) {
view.draw(canvas);
}
}
在我的活动中:
tv.setOnLongClickListener(new OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
ClipData data = ClipData.newPlainText("dot",
"Dot : " + v.toString());
View.DragShadowBuilder myShadow = new MyDragShadowBuilder(v);
v.startDrag(data, myShadow,(Object) v, 0);
return false;
}
});
我想模拟一个画廊。我有10000张照片要显示出来。我的画廊可以显示10张照片。我想拖动我的图库的LinearLayout水平包含图库的内容,当LinearLayout像SlidingDrawer一样到达窗口的末尾时,更改其内容并显示接下来的10张照片。 SlidingDrawer是一个很好的解决方案,但它有一些局限性。将整个LinearLayout设置为句柄时,无法单击它。当您为其设置单独的句柄时,无法确定句柄相对于内容的位置。
答案 0 :(得分:7)
从Bluefalcon的建议开始,我想出了类似的东西:
// in onCreate of the containing view
dragButton.setOnTouchListener(new DragExperimentTouchListener(dragButton.getX(), dragButton.getY()));
...
public class DragExperimentTouchListener implements View.OnTouchListener {
public DragExperimentTouchListener(float initalX, float initialY) {
lastX = initalX;
lastY = initialY;
}
boolean isDragging = false;
float lastX;
float lastY;
float deltaX;
@Override
public boolean onTouch(View arg0, MotionEvent arg1) {
int action = arg1.getAction();
if (action == MotionEvent.ACTION_DOWN && !isDragging) {
isDragging = true;
deltaX = arg1.getX();
return true;
} else if (isDragging) {
if (action == MotionEvent.ACTION_MOVE) {
arg0.setX(arg0.getX() + arg1.getX() - deltaX);
arg0.setY(arg0.getY());
return true;
} else if (action == MotionEvent.ACTION_UP) {
isDragging = false;
lastX = arg1.getX();
lastY = arg1.getY();
return true;
} else if (action == MotionEvent.ACTION_CANCEL) {
arg0.setX(lastX);
arg0.setY(lastY);
isDragging = false;
return true;
}
}
return false;
}
}
答案 1 :(得分:3)
水平滚动视图是android ...
中最简单的水平拖动选项尝试....并在指定的内部,给出textview或您喜欢使用的任何布局或小部件......它甚至可以用于动态程序......
答案 2 :(得分:3)
如果要滚动,请按照其余部分的建议使用水平滚动视图。
但是,如果你的意思是“拖放”拖动,那么你可以执行以下操作。
TextView
ACTION_DOWN
和事件ACTION_MOVE
x
和y
位置setTop
和setLeft
并将其设置为x
和y
以上invalidate
这应该在屏幕上拖动UI元素。
答案 3 :(得分:1)
HorizontalScroll视图是完美的解决方案,请参考此处的博客 http://android-coding.blogspot.com/2011/01/scrollview-and-horizontalscrollview.html
答案 4 :(得分:0)
您可以使用水平滚动视图来模拟水平滑动图库。