图像和视频过滤器像android中的Snapchat

Pun*_*uLz 11 android image imagefilter snapchat

我正在开发一个应用程序,我希望过滤器以Snapchat的方式应用,我可以理解的是他们正在使用PagerAdapter,但我不知道他们是如何在图像或视频上应用过滤器而且它不是另一个图像应用过滤器.任何可以做同样的想法或代码片段都非常适合图像和视频,并且也可以保存它们.感谢:D这就是我想要实现的目标[![] [1] [1]

Pun*_*uLz 6

我在这里所做的是将两个位图相互叠加。使用用户的触摸来确定应显示多少个位图。我有一个枚举,用户基本上向左或向右滚动,没有滚动。根据用户滚动的方向,将不同的位图应用于当前位图。

@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
    if (mCurrentScrollDirection.ordinal() == ScrollDirection.NONE.ordinal()) {
        if (distanceX > 0) {
            mCurrentScrollDirection = ScrollDirection.LEFT;
        } else {
            mCurrentScrollDirection = ScrollDirection.RIGHT;
        }
    }
    mTouchX = (int) e2.getX();
    overlayBitmaps(mTouchX);
    return false;
}

private void overlayBitmaps(int coordinateX) {

    switch (mCurrentScrollDirection) {
        case NONE: {
            //do nothing here
            break;
        }
        case LEFT: {
            overlayNextBitmap(coordinateX);
            break;
        }
        case RIGHT: {
            overlayPreviousBitmap(coordinateX);
            break;
        }
    }
}

private void overlayPreviousBitmap(int coordinateX) {
    mImageCanvas.save();

    Bitmap OSBitmap = Bitmap.createBitmap(mCurrentBitmap, coordinateX, 0, mCurrentBitmap.getWidth() - coordinateX, mCurrentBitmap.getHeight());
    mImageCanvas.drawBitmap(OSBitmap, coordinateX, 0, null);

    Bitmap FSBitmap = Bitmap.createBitmap(mPreviousBitmap, 0, 0, coordinateX, mCurrentBitmap.getHeight());
    mImageCanvas.drawBitmap(FSBitmap, 0, 0, null);

    mImageCanvas.restore();

    mCapturedImageView.setImageDrawable(new BitmapDrawable(getResources(), mResultBitmap));
}

private void overlayNextBitmap(int coordinateX) {
    mImageCanvas.save();

    Bitmap OSBitmap = Bitmap.createBitmap(mCurrentBitmap, 0, 0, coordinateX, mCurrentBitmap.getHeight());
    mImageCanvas.drawBitmap(OSBitmap, 0, 0, null);

    Bitmap FSBitmap = Bitmap.createBitmap(mNextBitmap, coordinateX, 0, mCurrentBitmap.getWidth() - coordinateX, mCurrentBitmap.getHeight());
    mImageCanvas.drawBitmap(FSBitmap, coordinateX, 0, null);

    mImageCanvas.restore();

    mCapturedImageView.setImageDrawable(new BitmapDrawable(getResources(), mResultBitmap));
}
Run Code Online (Sandbox Code Playgroud)

这工作得很好,考虑到我找不到很多,我只是没有在低内存设备上进行测试:)

有关完整的代码参考,请查看链接。这是我自己的库,您可以在其中捕获图像,应用滤镜并获得对调用活动的回调。仍在进行中。