Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何用两个手指滚动位图?_Android_Bitmap - Fatal编程技术网

Android 如何用两个手指滚动位图?

Android 如何用两个手指滚动位图?,android,bitmap,Android,Bitmap,谁能告诉我如何用两个手指滚动位图,因为在我的应用程序中,我用一个手指画画。因为我想画一幅完整的图像(它可能比屏幕大),所以用两个手指滚动会很方便?私有类Img扩展视图{ private class Img extends View { private Bitmap bmp; private Rect imgRect, scrollRect; private float prevX, prevY; private int newX, newY; publi

谁能告诉我如何用两个手指滚动位图,因为在我的应用程序中,我用一个手指画画。因为我想画一幅完整的图像(它可能比屏幕大),所以用两个手指滚动会很方便?

私有类Img扩展视图{
private class Img extends View {
    private Bitmap bmp;
    private Rect imgRect, scrollRect;
    private float prevX, prevY;
    private int newX, newY;

    public Img(Context context) {
        super(context);
        bmp = BitmapFactory.decodeResource(getResources(),
                R.drawable.screen);
        imgRect = new Rect(0, 0, width, height);
        scrollRect = new Rect(0, 0, width, height);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        switch (event.getAction()) {
        case MotionEvent.ACTION_MOVE: {
            int numPointers = event.getPointerCount();
            if (numPointers > 1) {
                float currX = event.getRawX();
                float deltaX = -(currX - prevX);
                newX += deltaX;
                float currY = event.getRawY();
                float deltaY = -(currY - prevY);
                newY += deltaY;
                if (newX < 0)
                    newX = 0;
                if (newY < 0)
                    newY = 0;
                if (newX > bmp.getWidth() - width)
                    newX = bmp.getWidth() - width;
                if (newY > bmp.getHeight() - height)
                    newY = bmp.getHeight() - height;
                scrollRect.set(newX, newY, newX + width, newY + height);
                invalidate();
                prevX = currX;
                prevY = currY;
            }
            break;
        }
        case MotionEvent.ACTION_DOWN: {
            prevX = event.getRawX();
            prevY = event.getRawY();
            break;
        }
        }
        return true;
    }

    @Override
    protected void onDraw(Canvas canvas) {
        canvas.drawBitmap(bmp, scrollRect, imgRect, new Paint());
    }
}
私有位图bmp; private Rect imgRect、scrollRect; 私人浮动prevX,prevY; 私有int newX,newY; 公共Img(上下文){ 超级(上下文); bmp=BitmapFactory.decodeResource(getResources(), R.可拉拔式屏幕); imgRect=新矩形(0,0,宽度,高度); scrollRect=新矩形(0,0,宽度,高度); } @凌驾 公共布尔onTouchEvent(运动事件){ 开关(event.getAction()){ case MotionEvent.ACTION\u移动:{ int numPointers=event.getPointerCount(); 如果(numPointers>1){ float currX=event.getRawX(); 浮动deltaX=-(currX-prevX); newX+=deltaX; float currY=event.getRawY(); 浮动三角洲=-(咖喱-上一个); newY+=三角洲; if(newX<0) newX=0; if(newY<0) newY=0; 如果(newX>bmp.getWidth()-width) newX=bmp.getWidth()-width; 如果(newY>bmp.getHeight()-height) newY=bmp.getHeight()-高度; scrollRect.set(newX,newY,newX+宽度,newY+高度); 使无效(); prevX=currX; prevY=咖喱; } 打破 } case MotionEvent.ACTION\u DOWN:{ prevX=event.getRawX(); prevY=event.getRawY(); 打破 } } 返回true; } @凌驾 受保护的void onDraw(画布){ drawBitmap(bmp、scrollRect、imgRect、new Paint()); } }
在这里,Img类用一个大位图表示视图,该位图显示其当前可见的矩形
int numPointers=event.getPointerCount();

如果(numPointers>1){
-这里是触摸屏幕的手指数。因此,如果大于1,大图像将滚动,否则,您可以实现绘制逻辑。

据我所知,emulator不支持多点触摸。