모바일 장치의 해상도에 따라 하나의 이미지가 전체 화면에서 자동으로 움직이는 것을 확인하려고합니다. 이제 클릭 또는 터치 이벤트가 필요합니다. 나는 여러 가지를 심판했지만 관련 답변을 찾을 수 없었다. 내가 안드로이드에서 참조 할 수 있도록 관련 예제가 있나요?안드로이드에서 터치 이벤트로 이미지를 움직입니까?
답변
다음 코드를 사용하여 이미지를 이동하십시오. 사용 중이며 잘 작동합니다. 활동에서
import android.graphics.Matrix;
import android.graphics.PointF;
import android.util.FloatMath;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.ImageView;
public class Touch implements OnTouchListener {
// These matrices will be used to move and zoom image
Matrix matrix = new Matrix();
Matrix savedMatrix = new Matrix();
// We can be in one of these 3 states
static final int NONE = 0;
static final int DRAG = 1;
static final int ZOOM = 2;
int mode = NONE;
// Remember some things for zooming
PointF start = new PointF();
PointF mid = new PointF();
float oldDist = 1f;
@Override
public boolean onTouch(View v, MotionEvent event) {
ImageView view = (ImageView) v;
// Dump touch event to log
dumpEvent(event);
// Handle touch events here...
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
savedMatrix.set(matrix);
start.set(event.getX(), event.getY());
mode = DRAG;
break;
case MotionEvent.ACTION_POINTER_DOWN:
oldDist = spacing(event);
if (oldDist > 10f) {
savedMatrix.set(matrix);
midPoint(mid, event);
mode = ZOOM;
}
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_POINTER_UP:
mode = NONE;
break;
case MotionEvent.ACTION_MOVE:
if (mode == DRAG) {
// ...
matrix.set(savedMatrix);
matrix.postTranslate(event.getX() - start.x, event.getY() - start.y);
} else if (mode == ZOOM) {
float newDist = spacing(event);
if (newDist > 10f) {
matrix.set(savedMatrix);
float scale = newDist/oldDist;
matrix.postScale(scale, scale, mid.x, mid.y);
}
}
break;
}
view.setImageMatrix(matrix);
return true; // indicate event was handled
}
/** Show an event in the LogCat view, for debugging */
private void dumpEvent(MotionEvent event) {
String names[] = { "DOWN", "UP", "MOVE", "CANCEL", "OUTSIDE", "POINTER_DOWN", "POINTER_UP", "7?", "8?", "9?" };
StringBuilder sb = new StringBuilder();
int action = event.getAction();
int actionCode = action & MotionEvent.ACTION_MASK;
sb.append("event ACTION_").append(names[actionCode]);
if (actionCode == MotionEvent.ACTION_POINTER_DOWN || actionCode == MotionEvent.ACTION_POINTER_UP) {
sb.append("(pid ").append(action >> MotionEvent.ACTION_POINTER_INDEX_SHIFT);
sb.append(")");
}
sb.append("[");
for (int i = 0; i < event.getPointerCount(); i++) {
sb.append("#").append(i);
sb.append("(pid ").append(event.getPointerId(i));
sb.append(")=").append((int) event.getX(i));
sb.append(",").append((int) event.getY(i));
if (i + 1 < event.getPointerCount())
sb.append(";");
}
sb.append("]");
}
/** Determine the space between the first two fingers */
private float spacing(MotionEvent event) {
float x = event.getX(0) - event.getX(1);
float y = event.getY(0) - event.getY(1);
return FloatMath.sqrt(x * x + y * y);
}
/** Calculate the mid point of the first two fingers */
private void midPoint(PointF point, MotionEvent event) {
float x = event.getX(0) + event.getX(1);
float y = event.getY(0) + event.getY(1);
point.set(x/2, y/2);
}
}
노트 ->
는 imageview.setOnTouchListener를 수행하여이 수신기를 연결 (새 터치());MainActivity에이 클래스를 어떻게 구현할 수 있습니까? @SANJAYGUPTA –
간단한 복사로이 클래스를 패키지에 붙여넣고 imageview.setOnTouchListener (new Touch()); 귀하의 oncreate 방법 –
도와 줘서 고마워하지만, 내가 한 짓을하지만 이미지가 움직이지 않습니다. @SANJAYGUPTA –
public class MainActivity extends Activity implements View.OnTouchListener {
// these matrices will be used to move and zoom image
private Matrix matrix = new Matrix();
private Matrix savedMatrix = new Matrix();
// we can be in one of these 3 states
private static final int NONE = 0;
private static final int DRAG = 1;
private static final int ZOOM = 2;
private int mode = NONE;
// remember some things for zooming
private PointF start = new PointF();
private PointF mid = new PointF();
private float oldDist = 1f;
private float d = 0f;
private float newRot = 0f;
private float[] lastEvent = null;
private ImageView view, fin;
private Bitmap bmap;
FrameLayout frm;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
view = (ImageView) findViewById(R.id.imageView);
fin = (ImageView) findViewById(R.id.imageView1);
view.setOnTouchListener(this);
frm=(FrameLayout)findViewById(R.id.frm);
}
public boolean onTouch(View v, MotionEvent event) {
// handle touch events here
view = (ImageView) v;
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
savedMatrix.set(matrix);
start.set(event.getX(), event.getY());
mode = DRAG;
lastEvent = null;
break;
case MotionEvent.ACTION_POINTER_DOWN:
oldDist = spacing(event);
if (oldDist > 10f) {
savedMatrix.set(matrix);
midPoint(mid, event);
mode = ZOOM;
}
lastEvent = new float[4];
lastEvent[0] = event.getX(0);
lastEvent[1] = event.getX(1);
lastEvent[2] = event.getY(0);
lastEvent[3] = event.getY(1);
d = rotation(event);
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_POINTER_UP:
mode = NONE;
lastEvent = null;
break;
case MotionEvent.ACTION_MOVE:
if (mode == DRAG) {
matrix.set(savedMatrix);
float dx = event.getX() - start.x;
float dy = event.getY() - start.y;
matrix.postTranslate(dx, dy);
} else if (mode == ZOOM) {
float newDist = spacing(event);
if (newDist > 10f) {
matrix.set(savedMatrix);
float scale = (newDist/oldDist);
matrix.postScale(scale, scale, mid.x, mid.y);
}
if (lastEvent != null && event.getPointerCount() == 2 || event.getPointerCount() == 3) {
newRot = rotation(event);
float r = newRot - d;
float[] values = new float[9];
matrix.getValues(values);
float tx = values[2];
float ty = values[5];
float sx = values[0];
float xc = (view.getWidth()/2) * sx;
float yc = (view.getHeight()/2) * sx;
matrix.postRotate(r, tx + xc, ty + yc);
}
}
break;
}
view.setBackgroundResource(R.mipmap.ic_launcher);
view.setImageMatrix(matrix);
bmap= Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.RGB_565);
Canvas canvas = new Canvas(bmap);
view.draw(canvas);
//fin.setImageBitmap(bmap);
return true;
}
public void ButtonClick(View v){
fin.setImageBitmap(bmap);
}
/**
* Determine the space between the first two fingers
*/
private float spacing(MotionEvent event) {
float x = event.getX(0) - event.getX(1);
float y = event.getY(0) - event.getY(1);
float s=x * x + y * y;
return (float)Math.sqrt(s);
}
/**
* Calculate the mid point of the first two fingers
*/
private void midPoint(PointF point, MotionEvent event) {
float x = event.getX(0) + event.getX(1);
float y = event.getY(0) + event.getY(1);
point.set(x/2, y/2);
}
/**
* Calculate the degree to be rotated by.
*
* @param event
* @return Degrees
*/
private float rotation(MotionEvent event) {
double delta_x = (event.getX(0) - event.getX(1));
double delta_y = (event.getY(0) - event.getY(1));
double radians = Math.atan2(delta_y, delta_x);
return (float) Math.toDegrees(radians);
}
}
-> 시도해보십시오.
- 1. 안드로이드에서 터치 이벤트로 선택된 경로에서 이미지 만들기
- 2. android에서 터치 이벤트로 이미지를 호출하는 방법은 무엇입니까?
- 3. SnapSvg로 터치 이벤트로 전환
- 4. 터치 이벤트로 div 스크롤
- 5. 터치/클릭 이벤트로 어지럽 힌다.
- 6. 터치 이벤트로 UIview의 텍스트 감지
- 7. 터치 이벤트로 HTML5 캔버스에 사각형 그리기
- 8. 마우스 이벤트를 드래그하여 터치 스크린 이벤트로 변환합니다.
- 9. 터치 이벤트로 아이폰/ipad 사용자 지정 컨트롤
- 10. 큰 배열이 아닌 터치 이벤트로 그림 그리기
- 11. jquery.mousemove를 터치 스크린 디바이스에서 드래그 이벤트로 모방합니다.
- 12. 터치 이벤트로 경도와 위도 가져 오기
- 13. 터치 이벤트로 마우스 움직임을 완전히 복제하십시오.
- 14. 이미지보기에서 터치 이벤트로 상세보기로 이동하는 방법?
- 15. 코드바 터치 이벤트로 google maps api가 무시됩니다.
- 16. 터치 이벤트가 안드로이드에서 삭제되었습니다
- 17. 안드로이드에서 MapView의 터치 이벤트
- 18. 안드로이드에서 터치 위치를 얻는 방법
- 19. 터치 이벤트가 안드로이드에서 작동하지 않습니다
- 20. 터치 이벤트 캔버스에서 이미지를 다시 그립니다.
- 21. NSImageView를 어떻게 움직입니까?
- 22. Magento가 밤새 천천히 움직입니까?
- 23. 화면에서 물건을 앞뒤로 움직입니까?
- 24. 정적 요소는 왜 움직입니까?
- 25. 클릭 이벤트로 이미지를 그리는 방법은 무엇입니까?
- 26. 클릭 이벤트로 이미지를 2 개로 전송합니다. Picturebox
- 27. 클릭 이벤트로 배경 이미지를 변경하고 싶습니다.
- 28. 안드로이드에서 이미지를 다운로드하는 방법?
- 29. 이미지를 안드로이드에서 PDF로 변환
- 30. 안드로이드에서 이미지를 저장하는 방법?
'자동으로 이동 중 '이란 사용자가'처리기 '를 사용하고 있다는 것을 의미합니까 ?? 그리고 당신은'onTouch()'이벤트를 구현할 수 있습니다. – Piyush
많은 스크롤 가능한 항목에는 머리글과 바닥 글이 내장되어 있으므로 구현하면 자신의 요소를 넣을 수 있습니다. –
나는 그것에 대해 모른다. 어떻게 사용하는지 알려주시겠습니까? @PiyushGupta –