4

プログラムで画像とボタンの数を追加し、シングルタップで、水平と垂直の両方でスムーズにスクロールしてピンチでズームできるスクロールビューが必要です。ここに私が正確に必要とするビデオがあります。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;
}

ピンチでズームする(レイアウト上のコンテンツ全体がズームされます) ありがとう。

4

0 に答える 0