세로 슬라이더이미지 컨트롤을 구현하려고합니다. 이미지는 ScrollView
안에 있습니다. ImageView
의 세로 끌기에 관해서는 상대 레이아웃의 위쪽 여백이 항상 다른 읽기를 제공합니다.이미지 뷰를 드래그하면서 Android 스트레치 배경 이미지
드래그하는 동안 600보다 큰 경우 상대 레이아웃의 배경 이미지가 드래그 한 이미지 위치와 함께 세로로 늘어납니다.
<ScrollView
android:id="@+id/scrollView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:fillViewport="true" >
...
<RelativeLayout
android:id="@+id/relativeLayouyt6"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/rTop"
android:background="@drawable/plain" >
<ImageView
android:id="@+id/dragImage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/arrow_one"
android:visibility="gone" />
</RelativeLayout>
당신은 내가있는 ScrollView의를
- 을 스크롤 한 오프셋하는 방법을 말해 주시겠습니까?
- 나는 드래그를 마친 후이 매개 변수를 구현하는 방법을 터치 한 위치에서 스크롤 된 위치와 더하기 이미지 Y 위치를 얻는 것을 알고 있습니까?
- 상대 레이아웃 내에서 이미지 뷰의 상대적 경계를 설정하는 방법은 무엇입니까? 이 배경 이미지를 이미지 뷰로 가져 오는 것이 현명합니까?
- 6 개의 관련 레이아웃을 프로그래밍 방식으로 재배치했지만 동일한 너비까지 올라가면 스크롤링 위치와 Scollview 총 높이에 영향을 줍니까? 그렇다면 재 위치 지정을위한 오프셋 Y를 계산하는 방법은 무엇입니까?
아래 월 11로 내 코드입니다 :
dragImage.setOnTouchListener(new OnTouchListener(){
//private int _xDelta;
private int _yDelta;
@Override
public boolean onTouch(View v, MotionEvent event) {
v.getParent().requestDisallowInterceptTouchEvent(true);
final float y = event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
//_yDelta = Y - lParams.topMargin;
mOldY2 = y;
break;
case MotionEvent.ACTION_UP:
mViewPager.setPagingEnabled(true);
break;
case MotionEvent.ACTION_POINTER_DOWN:
break;
case MotionEvent.ACTION_POINTER_UP:
break;
case MotionEvent.ACTION_MOVE:
btn4.setBackgroundResource(R.drawable.fbl02);
final float dy = y - mOldY2;
mNewY2 += dy;
mOldY2 = y;
System.out.println(mNewY2);
while(mNewY2 > 224){
mNewY2 -= 224;
}
while(mNewY2 < 157){
mNewY2 += 157;
}
if(mNewY2 < 157 || mNewY2 > 224)
break;
v.setTranslationY((int)mNewY2);
v.invalidate();
float power = (float) (51.5/67 -(0.2/67) * mNewY2) ;
System.out.println(power);
Float roundF = new Float(Math.round(power));
midBandStick = roundF;
btn4.setText(String.valueOf(midBandStick));
//}
//break;
}
return true;
}
아래
내 코드 :
public static void setRLBelowAnother(RelativeLayout rA , RelativeLayout rB ){
RelativeLayout.LayoutParams rparam4 =
(android.widget.RelativeLayout.LayoutParams) rB.getLayoutParams();
rparam4.addRule(RelativeLayout.BELOW, rA.getId());
rB.setLayoutParams(rparam4);
}
setRLBelowAnother(rTop , r1);
setRLBelowAnother(r1 , r2);
setRLBelowAnother(r2 , r6 );
setRLBelowAnother(r6 , r3 );
setRLBelowAnother(r3 , r4);
setRLBelowAnother(r4 , r5 );
dragImage.setVisibility(View.VISIBLE);
dragImage.setImageResource(R.drawable.slide_lshort);
dragImage.setX((float) (0.15*screenWidth));
dragImage.setY((float) (0.05*screenHeight));
dragImage.setOnTouchListener(new OnTouchListener(){
//private int _xDelta;
private int _yDelta;
@Override
public boolean onTouch(View v, MotionEvent event) {
v.getParent().requestDisallowInterceptTouchEvent(true);
final int X = (int) event.getX();
final int Y = (int) event.getY();
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
RelativeLayout.LayoutParams lParams = (RelativeLayout.LayoutParams) dragImage
.getLayoutParams();
//_xDelta = X - lParams.leftMargin;
_yDelta = Y - lParams.topMargin;
break;
case MotionEvent.ACTION_UP:
mViewPager.setPagingEnabled(true);
break;
case MotionEvent.ACTION_POINTER_DOWN:
break;
case MotionEvent.ACTION_POINTER_UP:
break;
case MotionEvent.ACTION_MOVE:
midStick = 0.2f;
btn4.setBackgroundResource(R.drawable.fbl02);
RelativeLayout.LayoutParams ParamsA = (RelativeLayout.LayoutParams) dragImage
.getLayoutParams();
//ParamsA.leftMargin = X - _xDelta;
ParamsA.topMargin = Y - _yDelta;
//ParamsA.rightMargin = -250;
ParamsA.bottomMargin = -250;
mViewPager.setPagingEnabled(false);
int offYb = 0;
int pos = ParamsA.topMargin + offYb ;
if(pos > -52 && pos < 582){
dragImage.setLayoutParams(ParamsA);
System.out.println(ParamsA.topMargin);
float power = (float) (100 + (900/634) * ParamsA.topMargin) ;
Float roundF = new Float(Math.round(power));
midStick = roundF;
btn4.setText(String.valueOf(midStick));
}
break;
}
return true;
}
});