- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
让我解释一下这是什么意思:
首先有两个相同大小的 ImageView ,第一个是 mask ,它重叠在第二个是照片上。
pusdeo 布局
<RelativeLayout>
<image view (mask) match parent>
<image view (photo) match parent>
</RelativeLayout>
因此,当应用程序启动时,它是一个完整的黑色页面。然后用户开始在屏幕上拖动,就像扫出面具并显示面具后面的照片。示例照片是这样的:
只关注最上面的图片,看起来像这样,照片上面有一个 mask ,只有当用户在屏幕上拖动时,它才会清除 mask 并显示后面的照片。如何实现,我需要使用 cavans/其他库吗?
感谢帮助
最佳答案
这是一个代码示例。重要的部分是 1)它使用与 ImageView 重叠的自定义 View ; 2)它使用位图 Canvas 进行实际绘图(需要才能清除像素); 3)绘画使用了特殊的CLEAR
传输模式。
package com.example.drawingwithmask;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
public class DrawView extends View implements OnTouchListener {
private Paint bmPaint = new Paint();
private Paint drawPaint = new Paint();
private Path path = new Path();
private Canvas cv = null;
private Bitmap bm = null;
private boolean firstTimeThru = true;
public DrawView(Context context) {
super(context);
init();
}
public DrawView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public void init() {
setFocusable(true);
setFocusableInTouchMode(true);
this.setOnTouchListener(this);
}
@Override
public void onDraw(Canvas canvas) {
// Set everything up the first time anything gets drawn:
if (firstTimeThru) {
firstTimeThru = false;
// Just quickly fill the view with a black mask:
canvas.drawColor(Color.BLACK);
// Create a new bitmap and canvas and fill it with a black mask:
bm = Bitmap.createBitmap(canvas.getWidth(), canvas.getHeight(), Config.ARGB_8888);
cv = new Canvas();
cv.setBitmap(bm);
cv.drawColor(Color.BLACK);
// Specify that painting will be with fat strokes:
drawPaint.setStyle(Paint.Style.STROKE);
drawPaint.setStrokeWidth(canvas.getWidth() / 15);
// Specify that painting will clear the pixels instead of paining new ones:
drawPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
}
cv.drawPath(path, drawPaint);
canvas.drawBitmap(bm, 0, 0, bmPaint);
super.onDraw(canvas);
}
public boolean onTouch(View view, MotionEvent event) {
float xPos = event.getX();
float yPos = event.getY();
switch (event.getAction()) {
// Set the starting position of a new line:
case MotionEvent.ACTION_DOWN:
path.moveTo(xPos, yPos);
return true;
// Draw a line to the ending position:
case MotionEvent.ACTION_MOVE:
path.lineTo(xPos, yPos);
break;
default:
return false;
}
// Call onDraw() to redraw the whole view:
invalidate();
return true;}
}
<ImageView
android:id="@+id/image"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/ic_launcher" />
<com.example.drawingwithmask.DrawView
android:id="@+id/draw"
android:layout_width="match_parent"
android:layout_height="match_parent" />
包 com.example.drawingwithmask;
导入android.app.Activity;导入 android.os.Bundle;
public class MainActivity extends Activity {
DrawView drawView = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_layout);
drawView = (DrawView) findViewById(R.id.draw);
}
}
这里有一种方法可以估计是否已达到特定的 mask 清除阈值。我通过从 MOTION_MOVE
事件案例中调用 checkProgress()
来测试它。这可能不是最好的方法,甚至可能不是好的方法,但它至少以 STEPS^2(呈现的 400)像素检查为代价提供了估计。
final int STEPS = 20;
final double THRESHOLD = 0.70;
private void checkProgress() {
int sum = 0;
for (int x = 0; x < bm.getWidth(); x += bm.getWidth() / STEPS)
for (int y = 0; y < bm.getHeight(); y += bm.getHeight() / STEPS)
if (bm.getPixel(x, y) != Color.BLACK)
sum++;
double progress = (double) sum / (STEPS * STEPS);
Log.v(TAG, "Cleared: " + progress);
if (progress >= THRESHOLD)
Log.i(TAG, "Done!");
}
关于android - 在 android ImageView 上创建一个 "drag and clear mask",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25502258/
我有两个包含两个接近矩形的形状的蒙版。 面罩示例(黄色): 现在,我要确定其中一个遮罩比另一个遮罩更接近实际矩形。 有可能实现吗? 最佳答案 获取轮廓和(旋转的)矩形边界框之间的面积差。面积差异最小的
我最近从 numpy 1.11 升级到 numpy 1.13 希望摆脱这个屏蔽数组警告,但它仍然存在: MaskedArrayFutureWarning:在具有共享掩码的掩码数组上设置项目不会复制掩码
我需要在sencha中的选项卡面板中添加一个加载掩码,我在 Controller 中通过Ajax请求加载了一个商店,但是在商店加载之前我需要放置一个加载掩码,并且在商店加载之后已加载,我需要将其删除。
我希望能够设置或清除 uintX_t 的(多个)位。 i 是一个运行时变量 (uintX_t)。b 是一个运行时变量 (uintX_t),它被限制为 0 或 1。 mask 是编译时常量。 有没有比以
我有一个处理程序,更像是一个提交按钮。我想掩盖整个页面或该表单以显示等待消息,直到完成其余过程。我做到了,它在FF中有效,但在IE中没有成功,当我执行Ext.getCmp('').body.mask(
我有我使用 Snap SVG 的 JS 代码。在某些时候我使用 element.attr({mask:maskelement}); 在该片段中,element和 maskelement是我的 svg
我需要从图标(.ICO) 文件中获取XOR Mask 和AND Mask。 如果有人可以建议我如何从 Java 执行此操作,那就太棒了。如果没有,您是否知道有任何应用程序可以获取这两个掩码并允许您扔掉
我一直在尝试学习scenekit并完成了一本书,但只有碰撞检测部分不明白,也许是最重要的部分。有类别掩码、共谋掩码和物理体?.contactTestBitMask。 我想创建一个简单的游戏来实现这个目
我在 Canvas 上制作了一个矩形 mask ,我需要 mask 外的任何东西都具有 0.8 的不透明度,因此 mask 外的所有对象都被视为不透明请看一下 fiddle 。 http://jsfi
我有一个包含可滚动内容的 div。我想为其添加一个覆盖内容的颜色 mask ,但不会随内容滚动。 http://jsfiddle.net/6e9t1wt3/1/ *{box-sizing:bord
在我的代码中,我必须选择这两个表达式之一(其中 mask 和 i 是非常数整数 -1 > i & 1) 和 (mask & 1 << i) 哪个更快?,我们在Stack Overflow上找到一个类似
我有一个包含 Image 的 Imageview 。还有一个包含兔子形状的面具形状。我有一个代码可以给出以下结果。 - (UIImage*)mynewmaskImage:(UIImage *)imag
您可能熟悉 enum 位掩码方案,例如: enum Flags { FLAG1 = 0x1, FLAG2 = 0x2, FLAG3 = 0x4, FLAG4 = 0x8
在本文之后,我将尝试实现他们如何计算每个实体的对数概率的平均值(第3.3节)。更具体地说,每个实体的得分计算为其令牌上的日志概率的平均值。。我有一个实体列表和一些提示:。任务是为每个提示找到应该适合的
我正在尝试遮盖比 mask 小的背景图像。背景和蒙版之间的空间显示为黑色。 这是我正在使用的代码: batch.end(); batch.begin(); Gdx
因此,我一直在尝试将背景图像裁剪成圆形 六边形,我发现 webkit 令人惊叹的 mask 图像非常容易地解决了我所有的问题。遗憾的是,它仅适用于 Chrome 和 Safari(当然)。 我如何为非
我有两个Java项目数据服务应用程序和数据报告应用程序,数据服务应用程序生成用于某些处理和数据报告应用程序的某些数据应该使用数据服务应用程序来使用它生成的数据来生成一些报告,这两个应用程序都应该构建为
我有一个带有绿色背景的简单 Activity ,我正在尝试提供一个带有透明圆形区域的红色叠加层。这是我要实现的效果: Expected Image 根据我在网上找到的代码,我看到的是这样的: Resu
我关注了这个link创建一个名为 mask 的自定义操作。tensorflow op的主体是 def tf_mask(x, labels, epoch_, name=None): # add "la
正如标题所说,我有 self.view,我将其添加到它的 mask 中(link) 属性另一个 View ,但是当我使用 addSubview 添加更多 View 到 self.view 时,掩码被删
我是一名优秀的程序员,十分优秀!