- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在自定义 View 上绘图。然后将绘制的图像转换为位图以进行进一步处理,但是当我这样做时Bitmap bitmap = drawView1.getDrawingCache();
位图为空。为什么为null.以及如何解决
public class TrainingActivity extends ActionBarActivity {
private DrawingView drawView1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_training);
drawView1 = (DrawingView) findViewById(R.id.drawing1);
}
public void submitButtonClicked(View v) {
Bitmap bitmap = drawView1.getDrawingCache();
}
自定义 View 的xml文件是
<persistent.DrawingView
android:id="@+id/drawing1"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_marginBottom="3dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:layout_marginTop="3dp"
android:layout_weight="1"
android:background="#FFFFFFFF" />
还有我的 DrawingView 类是
public class DrawingView extends View {
//drawing path
private Path drawPath;
//drawing and canvas paint
private Paint drawPaint, canvasPaint;
//initial color
//private int paintColor = 0xFF660000;
private int paintColor = 0xFF000000;
//canvas
private Canvas drawCanvas;
//canvas bitmap
private Bitmap canvasBitmap;
private Context mContext;
public DrawingView(Context context, AttributeSet attrs) {
super(context, attrs);
mContext = context;
setupDrawing();
}
private void setupDrawing() {
//get drawing area setup for interaction
drawPath = new Path();
drawPaint = new Paint();
drawPaint.setColor(paintColor);
drawPaint.setAntiAlias(true);
drawPaint.setStrokeWidth(20);
drawPaint.setStyle(Paint.Style.STROKE);
drawPaint.setStrokeJoin(Paint.Join.ROUND);
drawPaint.setStrokeCap(Paint.Cap.ROUND);
canvasPaint = new Paint(Paint.DITHER_FLAG);
/* DisplayMetrics metrics = new DisplayMetrics();
((Activity) mContext).getWindowManager().getDefaultDisplay().getMetrics(metrics);
int width = metrics.widthPixels;
int height = metrics.heightPixels;
drawCanvas.drawRect(100, height - 100, width - 100, 100, drawPaint);*/
}
@TargetApi(Build.VERSION_CODES.KITKAT)
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
//view given size
super.onSizeChanged(w, h, oldw, oldh);
canvasBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
drawCanvas = new Canvas(canvasBitmap);
int leftx = 70;
int topy = 70;
Paint rectPaint=new Paint();
rectPaint.setColor(Color.BLUE);
rectPaint.setAntiAlias(true);
rectPaint.setStrokeWidth(9);
rectPaint.setStyle(Paint.Style.STROKE);
rectPaint.setStrokeJoin(Paint.Join.ROUND);
rectPaint.setStrokeCap(Paint.Cap.ROUND);
drawCanvas.drawRect(leftx, topy, w-leftx, h-topy, rectPaint);
Rect r=new Rect(leftx, topy, w-topy, h-topy);
drawCanvas.clipRect(r);
}
@Override
protected void onDraw(Canvas canvas) {
//draw view
canvas.drawBitmap(canvasBitmap, 0, 0, canvasPaint);
canvas.drawPath(drawPath, drawPaint);
}
public boolean onTouchEvent(MotionEvent event) {
//detect user touch
float touchX = event.getX();
float touchY = event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
drawPath.moveTo(touchX, touchY);
break;
case MotionEvent.ACTION_MOVE:
drawPath.lineTo(touchX, touchY);
break;
case MotionEvent.ACTION_UP:
drawCanvas.drawPath(drawPath, drawPaint);
drawPath.reset();
break;
default:
return false;
}
invalidate();
return true;
}
//for erasing purpose this function will be called
public void setErase(boolean isErase) {
//set erase true or false
boolean erase = isErase;
if (erase) {
//drawPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
drawCanvas.drawColor(0, PorterDuff.Mode.CLEAR);
} else {
drawPaint.setXfermode(null);
}
}
}
最佳答案
我的理解是 getDrawingCache() 方法对 View 类的大小(宽度和高度)有限制。如果 View 类太大,getDrawingCache() 只会返回 null。因此,解决方案是不使用该方法,而是像下面那样执行。
Bitmap bitmap = Bitmap.createBitmap(drawView1.getMeasuredWidth(), drawView1.getMeasuredHeight(), Bitmap.Config.ARGB_8888);
Canvas bitmapHolder = new Canvas(bitmap);
drawView1.draw(bitmapHolder);
// bitmap now contains the data we need! Do whatever with it!.
我按照这个人给出的评论得到了这个答案getDrawingCache() returns null
关于android - 空位图 : View. getDrawingCache() 给出空位图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31116012/
我几乎阅读了关于这个主题的所有帖子,但似乎没有一个有帮助。 我正在 try catch 当前屏幕的屏幕截图。为此,我正在使用 getDrawingCache。这是我的代码: mRootView.get
我有一个自定义 View ,它将管理数百个离散的用户定义的顺序绘图事件。我不是维护所有单个文本、线条、形状更新的集合,然后在每次 onDraw 期间重新绘制它们,而是在每次 onDraw 结束时获取
我在 onDraw 函数中调用 getDrawingCache。问题是它只在第一次包含对 Canvas 的更改,之后,它根本不会更新新的更改。这是我的代码: paintAction.d
我目前正在处理一个项目,该项目需要显示一个带有灰色(黑色/白色)背景的对话框。为此,我截取了整个应用程序的屏幕截图,将此屏幕截图放在全屏对话框的背景上,并在其上放置一个 ColorFilter 使其变
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 9
我使用以下方法在我的应用中截取屏幕截图: private Bitmap takeScreenshot() { View rootView = findViewById(android.R.id
我想使用 DrawingCache 捕获 ImageView 的内容。我写了下面的代码。 iv1 = (ImageView)findViewById(R.id.iv1); iv2 = (ImageVi
我正在开发一个简单的绘画应用程序,并尝试实现在用户请求时提供更多空间来绘制的功能,我认为这可以通过简单地启用我的 CustomView 类(包含在 LinearLayout 中)的滚动来完成然后在 S
所以我正在尝试制作 VideoView 的屏幕截图。我认为最简单的方法是: videoView.setDrawingCacheEnabled(true); 然后当我需要截图的时候: Bitmap sc
我使用 Pragmatic Bookshelf 的 Touch V2 示例有一个带有加载位图图像的 RelativeLayout -- http://media.pragprog.com/titles
我正在尝试在 TextView 中创建文本的位图。过去,我使用 getDrawingCache 完成此操作。但是,现在我需要创建一个 TextView 的位图,其中的文本比以前长得多。这导致 getD
@Override public boolean execute(String action, JSONArray args, CallbackContext callbackContext) thr
我正在尝试创建一个允许用户截取当前 View 的应用程序。我正在使用以下代码来执行此操作。 View content = ((Activity)ctx).findViewById(R.id.rootl
我对 TextView 的 getDrawingCache() 和 setText() 有问题。在 setText() 和使用 getDrawingCache() 之后,我没有在位图中看到文本。
我在自定义 View 上绘图。然后将绘制的图像转换为位图以进行进一步处理,但是当我这样做时Bitmap bitmap = drawView1.getDrawingCache();位图为空。为什么为nu
我正在使用 getDrawingCache() 方法捕获我的布局 View 并从中创建图像。代码工作正常并生成图像,但这里的问题是,生成的图像质量很低。我希望生成的图像的分辨率很高,这样无论何时将其设
我的应用有这段代码 mView.setDrawingCacheEnabled(true); mBitmap = Bitmap.createBitmap(mView.getDrawingCache())
如果我有一个具有透明背景的 View 并且我执行了 bitmap = view.getDrawingCache();,不幸的是该位图不再透明。后台设置黑色背景。 我试过了 view.setDrawin
此代码中缺少什么?同样的代码适用于 ICS。在 API 8 上,滚动出现并且一些内容从屏幕上消失。这种情况下如何获取绘图缓存? 代码: TableLayout page = (TableLayout)
我正在尝试将 View 转换为位图。在模拟器中我的程序工作正常并按预期运行但是当我在设备中运行相同的代码时它在特定行给出空指针异常: Bitmap b = Bitmap.createBitmap(vi
我是一名优秀的程序员,十分优秀!