오늘 4 ImageViews 및 ListView 레이아웃을 만들고 ImageView 위치에 따라 목록보기 위치를 업데이트하려고합니다.Android에서 움직이는 요소로 레이아웃을 올바르게 업데이트하는 방법은 무엇입니까?
SS 내가 할 노력하고있어 무엇을 보여 :
우리는 "회색 손잡이"풀 일단리스트 뷰 위치가 업데이트 될 때 볼 수 있듯이. 다 잘됐지만 핸들을 움직이는 동안 그래픽이 부드럽지는 않지만 말더듬이가납니다.
이렇게 사용하는 코드는 다음과 같습니다.
btn.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent me) {
if (me.getAction() == MotionEvent.ACTION_DOWN) {
status = START_DRAGGING;
}
if (me.getAction() == MotionEvent.ACTION_UP) {
status = STOP_DRAGGING;
Log.i("Drag", "Stopped Dragging");
} else if (me.getAction() == MotionEvent.ACTION_MOVE) {
if (status == START_DRAGGING) {
System.out.println("Dragging");
GestureImageView image1 = (GestureImageView) findViewById(R.id.image1);
GestureImageView image2 = (GestureImageView) findViewById(R.id.image2);
ImageView header = (ImageView) findViewById(R.id.imageHeader);
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
lp.addRule(RelativeLayout.CENTER_HORIZONTAL);
margin1 = (int) me.getRawY() - 100;
if (margin1 < header.getHeight() - btn.getHeight()/3)
margin1 = header.getHeight() - btn.getHeight()/3;
else if (margin1 > layout.getHeight() - 1.5
* btn.getHeight() - btn3.getHeight())
margin1 = (int) (layout.getHeight() - 1.5
* btn.getHeight() - btn3.getHeight());
lp.topMargin = margin1;
btn.setLayoutParams(lp);
if (margin1 >= margin2 - 35) {
RelativeLayout.LayoutParams newlp = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
newlp.addRule(RelativeLayout.CENTER_HORIZONTAL);
margin2 = margin1 + 35;
newlp.topMargin = margin2;
btn2.setLayoutParams(newlp);
RelativeLayout.LayoutParams newlp2 = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.FILL_PARENT);
newlp2.addRule(RelativeLayout.ABOVE, btn2.getId());
newlp2.addRule(RelativeLayout.BELOW, header.getId());
newlp2.bottomMargin = -(15 + margin2);
image2.setLayoutParams(newlp2);
image2.setAdditionalY(image2.getHeight(),
margin2 - 85, image2.getScaledHeight()
- margin2 - 85);
}
RelativeLayout.LayoutParams lp3 = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.FILL_PARENT);
lp3.addRule(RelativeLayout.ABOVE, btn.getId());
lp3.addRule(RelativeLayout.BELOW, header.getId());
lp3.bottomMargin = -(15 + margin1);
image1.setLayoutParams(lp3);
image1.setAdditionalY(image1.getHeight(), margin1 - 50,
image1.getScaledHeight() - margin1 - 50);
}
}
return false;
}
});
"회색 손잡이"에 청취자를 추가하고 움직이는 동안 레이아웃 규칙을 업데이트하고 여백을 계산합니다. 이 작업을 수행하는 더 좋은 방법이 있습니까?
나를 돕기 위해 미리 Thx.
편집 : 내가 추가하는 것을 잊었다하여 더듬 더 큰 목록보기에게 더 큰 내가이 위치를 변경하는 동안 모든보기를 다시 작성 목록보기에 의한 생각이.
EDIT2 : 로그를 추가하고 목록보기를 이동하는 동안 목록보기가 움직일 때마다 모든보기가 다시 작성됩니다. 이것을 막을 수있는 방법이 있습니까? 사용자가 이미지 이동을 멈 추면 다시 만들 수 있습니까?