【发布时间】:2014-05-19 14:04:45
【问题描述】:
我需要创建一个演示,其中会出现一个弹出窗口,当用户拖动该弹出窗口时,它的大小会逐渐减小。大小取决于用户拖动时所覆盖的距离。该功能类似于 PAPER 应用程序(FACEBOOK)。 我可以通过以下代码拖动弹出窗口。但是代码无法减小弹出窗口的大小,同时拖动它会减小弹出窗口释放时的大小。
public class MainActivity extends Activity implements OnTouchListener,
OnDragListener {
private static final String LOGCAT = null;
private LayoutParams layoutParams;
ImageView img;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
img = (ImageView) findViewById(R.id.textView1);
img.setOnTouchListener(this);
findViewById(R.id.pinkLayout).setOnDragListener(this);
findViewById(R.id.yellowLayout).setOnDragListener(this);
}
public boolean onTouch(View view, MotionEvent motionEvent) {
if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
layoutParams = (LayoutParams) img.getLayoutParams();
DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view);
view.startDrag(null, shadowBuilder, view, 0);
view.setVisibility(View.INVISIBLE);
return true;
} else {
return false;
}
}
public boolean onDrag(View layoutview, DragEvent dragevent) {
int action = dragevent.getAction();
switch (action) {
case DragEvent.ACTION_DRAG_LOCATION:
Toast.makeText(getApplicationContext(), "" + dragevent.getX(),
Toast.LENGTH_SHORT).show();
layoutParams.height = (int) dragevent.getX();
layoutParams.width = (int) dragevent.getX();
img.setLayoutParams(layoutParams);
break;
case DragEvent.ACTION_DRAG_STARTED:
System.out.println("Action drag started");
/*
* Log.d(LOGCAT, "Drag event started");
*
* System.out.println("Drag event started");
*/
break;
case DragEvent.ACTION_DRAG_ENTERED:
System.out.println("Action drag entered");
/*
* System.out.println("Drag event entered into " +
* layoutview.toString()); Log.d(LOGCAT, "Drag event entered into "
* + layoutview.toString());
*/
break;
case DragEvent.ACTION_DRAG_EXITED:
System.out.println("Action drag exited");
/*
* System.out.println("Drag event exited from " +
* layoutview.toString());
*
* Log.d(LOGCAT, "Drag event exited from " + layoutview.toString());
*/
break;
case DragEvent.ACTION_DROP:
System.out.println("Action drag drop");
// Log.d(LOGCAT, "Dropped");
View view = (View) dragevent.getLocalState();
ViewGroup owner = (ViewGroup) view.getParent();
owner.removeView(view);
LinearLayout container = (LinearLayout) layoutview;
container.addView(view);
view.setVisibility(View.VISIBLE);
break;
case DragEvent.ACTION_DRAG_ENDED:
System.out.println("Action drag ended");
/* Log.d(LOGCAT, "Drag ended"); */
break;
default:
break;
}
return true;
}
}
谁能告诉我应该如何处理我的存在代码来实现上述功能。谢谢
【问题讨论】: