我正在开发一个应用程序,我希望像 snapchat 那样应用滤镜,据我所知,他们正在使用 PagerAdapter,但我不知道他们是如何在图像或视频上应用滤镜的,但事实并非如此另一个应用了滤镜的图像。对于图像和视频以及保存它们,任何可以做同样事情的想法或代码 fragment 都会受到高度赞赏。谢谢:D
最佳答案
我在这里所做的是将两个位图相互叠加。使用用户的触摸来确定应显示多少位图。我有一个枚举,用户基本上向左或向右滚动,没有。根据用户滚动的方向,在当前位图上应用不同的位图。
@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));
}
这工作得很好,我只是没有在低内存设备上测试,因为我找不到很多:)
完整代码引用检查this链接出来。这是我自己的库,您可以在其中捕获图像应用过滤器并获得对调用 Activity 的回调。它仍在进行中。
关于android - 图像和视频过滤器,如 android 中的 snapchat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31981207/