我有自定义ImageView
和Button
,点击Button
然后向上和向下移动调整ImageView
的大小,但它无法顺利运行。
我创建了一个单独的线程来平滑用户移动,但显然它无法进行任何GUI更改..我试图找到一种方法来使用Animation
,但我没有看到一种方式不断更新目标高度。
工作代码
按钮onTouchListener:
// resize button start location
private PointF startResize = new PointF();
ImageView resize = (ImageView) findViewById( R.id.resize );
resize.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
// save first touch location
startResize.set( boardImage.getHeight(), event.getY() );
break;
case MotionEvent.ACTION_MOVE:
// calculate horizontal move distance
int movedDistance = Math.round(event.getY() - startResize.y);
if ( Math.abs( movedDistance ) > 4 ) {
// set new height
boardImage.setHeight( movedDistance + (int)startResize.x );
}
break;
}
return true; // indicate event was handled
}
});
自定义ImageView
自动调用setHeight:
// set height and revalidate
public void setHeight( int newHeight ){
height = newHeight;
// rescale image
setImageMatrix( checkMatrix() );
requestLayout();
}
onMeasure:
@Override
public void onMeasure( int widthMeasureSpec, int heightMeasureSpec ) {
setMeasuredDimension( width, height );
}
编辑 更好的解释
触摸红色环绕的Button
并向上/向下拖动可将其上方的ImageView
调整为任意大小。见下图。
我尝试使用Animation
,但我必须取消它并设置一个新的每一个微小的小动作导致每秒创建20/30个新动画..
zoomed layout http://roelept82.eightytwo.axc.nl/pic/link1.png