내 응용 프로그램에서 안드로이드 응용 프로그램을 개발 중입니다. 일부 ImageViews를 동적으로 만들고 해당 ImageView를 RelativeLayout으로 설정합니다. 그래서 레이아웃의 각 이미지를 독립적으로 드래그하고 싶습니다. 이제는 작동하지만 올바르지 않게 이미지를 드래그하면 이미지가 진동하고 천천히 움직입니다. 그리고 핀치 줌을 구현하고 싶었습니다. 가능합니까? 그리고 어떻게 이미지를 움직일 때 진동을 제거 할 수 있습니까? 어떤 사람이 그것을 알고 있다면 좀 도와주세요 ..onTouchListener가 ImageView에서 제대로 작동하지 않습니다.
감사
이 내 onTouchListener()이 RelativeLayout의
으로 이미지를 설정하는 데 사용 내 setCanvasImage() 방법canvasImage[i].setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
x1 = motionEvent.getX();
y1 = motionEvent.getY();
//Log.v("vvvvvv", "" + x1 + " " + y1);
final int action = motionEvent.getAction();
switch (motionEvent.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
String w = imglayout.getTop() + " " + imglayout.getHeight();
Log.v("wwww", "" + w);
x2 = motionEvent.getX();
y2 = motionEvent.getY();
dx = x2 - canvasImage[finalI].getX();
dy = y2 - canvasImage[finalI].getY();
//Log.v("cccccc", "" + x2 + " " + y2);
moving = true;
break;
case MotionEvent.ACTION_UP:
moving = false;
break;
case MotionEvent.ACTION_MOVE:
if (moving) {
canvasImage[finalI].setX(motionEvent.getX() - dx);
canvasImage[finalI].setY(motionEvent.getY() - dy);
//Log.v("qqqqqq", "" + canvasImage[finalI].getX());
}
break;
}
//mainLayout.invalidate();
return true;
}
});
입니다
public void setCanvasImage() {
int screenSize = getResources().getConfiguration().screenLayout &
Configuration.SCREENLAYOUT_SIZE_MASK;
final int imgCount = dbobj.getFromTemp();
canvasImage = new ImageView[imgCount];
imglayout = (RelativeLayout) findViewById(R.id.canvas);
final String[] strImage = dbobj.getdImage();
imglayout.removeAllViews();
for (int i = 0; i < imgCount; i++) {
canvasImage[i] = new ImageView(this);
canvasImage[i].setTag("img_" + i);
boolean tabletSize = getResources().getBoolean(R.bool.isTablet);
if (tabletSize) {
int imgWidth = 130;
int imgHeight = 130;
RelativeLayout.LayoutParams paramss = new RelativeLayout.LayoutParams(imgWidth, imgHeight);
paramss.setMargins(posLeft, posTop, 0, 0);
canvasImage[i].setLayoutParams(paramss);
canvasImage[i].setScaleType(ScaleType.FIT_XY);
canvasImage[i].setTag(strImage[i]);
setImage(strImage[i], canvasImage[i]);
imglayout.addView(canvasImage[i]);
}
if(screenSize == Configuration.SCREENLAYOUT_SIZE_NORMAL){
int imgWidth = 100;
int imgHeight = 100;
RelativeLayout.LayoutParams paramss = new RelativeLayout.LayoutParams(imgWidth, imgHeight);
paramss.setMargins(posLeft, posTop, 0, 0);
canvasImage[i].setLayoutParams(paramss);
canvasImage[i].setTag(strImage[i]);
setImage(strImage[i], canvasImage[i]);
imglayout.addView(canvasImage[i]);
}
posLeft = posLeft + 15;
}
}
relativeativeLayout xml 파일
<RelativeLayout
android:layout_below="@+id/btnhorscrolvw"
android:layout_width="match_parent"
android:layout_height="500dp"
android:id="@+id/canvas"
android:background="#ffff"
android:orientation="horizontal"
>
</RelativeLayout>
에이 기능을 완벽하게 구현하려면 andoid : clickable = "true" – Ak9637
하지만 작동하지 않습니다. – Astro