プログラムで画像とボタンの数を追加し、シングルタップで、水平と垂直の両方でスムーズにスクロールしてピンチでズームできるスクロールビューが必要です。ここに私が正確に必要とするビデオがあります。ScrollView内で水平スクロールビューを試しました。スムーズにスクロールできます。シングルタップでアイテムを追加できます。今はズームできません。サンプルコードは次のとおりです。
public void setUpNoticeBoard(){
canvasLayout = (FrameLayout) findViewById(R.id.frameLayout);
canvasLayout.removeAllViews();
FrameLayout.LayoutParams paramsImage = new FrameLayout.LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
final ImageView noticeBoard = new ImageView(this);
noticeBoard.setLayoutParams(paramsImage);
noticeBoard.setAdjustViewBounds(true);
noticeBoard.setImageDrawable(getResources().getDrawable(R.drawable.noticeboard));
noticeBoard.setScaleType(ImageView.ScaleType.CENTER_CROP);
canvasLayout.addView(noticeBoard);
float xx = noticeBoard.getWidth();
float yy = noticeBoard.getHeight();
System.out.println("noticeBoard Width:" + xx + "And Height:" + yy);
for (int i = 0; i < 50; i++) {
int x= (int)Math.ceil(Math.random()*3000);
int y= (int)Math.ceil(Math.random()*2000);
FrameLayout.LayoutParams paramsNotice = new FrameLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
paramsNotice.setMargins(x, y, 0, 0);
final ImageView notice = new ImageView(this);
notice.setLayoutParams(paramsNotice);
Resources res = getResources();
String imageName = "pin" + (int)Math.ceil(Math.random()*8);
int resourceId = res.getIdentifier(imageName, "drawable", getPackageName() );
notice.setTag(imageName);
notice.setImageResource(resourceId);
canvasLayout.addView(notice);
}
}
@Override
public boolean onTouchEvent(MotionEvent event) {
float curX, curY;
newPin.setVisibility(View.INVISIBLE);
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
mx = event.getX();
my = event.getY();
break;
case MotionEvent.ACTION_MOVE:
curX = event.getX();
curY = event.getY();
vScroll.scrollBy((int) (mx - curX), (int) (my - curY));
hScroll.scrollBy((int) (mx - curX), (int) (my - curY));
mx = curX;
my = curY;
break;
case MotionEvent.ACTION_UP:
curX = event.getX();
curY = event.getY();
vScroll.scrollBy((int) (mx - curX), (int) (my - curY));
hScroll.scrollBy((int) (mx - curX), (int) (my - curY));
break;
}
return gestureScanner.onTouchEvent(event);
}
public boolean onSingleTapUp(MotionEvent e) {
int x = (int) e.getX();
int y = (int) e.getY();
FrameLayout.LayoutParams paramsNewPin = new FrameLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
paramsNewPin.setMargins(x + hScroll.getScrollX() - 98, y + vScroll.getScrollY() - 250, 0, 0);
final ImageView newPin = new ImageView(this);
newPin.setLayoutParams(paramsNewPin);
newPin.setImageResource(R.drawable.pin5);
canvasLayout.addView(newPin);
return true;
}
ピンチでズームする(レイアウト上のコンテンツ全体がズームされます) ありがとう。