android drawrect 单位,android drawRect没有画任何东西

我碰到了这个基本的drawRect,没有显示任何内容,我也不知道为什么.

onDraw

protected void onDraw(Canvas canvas) {

canvas.drawBitmap(canvasBitmap, 0, 0, canvasPaint);

canvas.drawCircle(circle1x, circle1y, circleRadius, circlePaint);

canvas.drawCircle(circle2x, circle2y, circleRadius, circlePaint);

canvas.drawRect(rect, rectPaint);

}

setupCropping

在onDraw之前运行,并从View构造函数调用以设置所有var

private void setupCropping() {

final float scale = getContext().getResources().getDisplayMetrics().density;

circleRadius = (int) (circleRadiusDp * scale + 0.5f);

DisplayMetrics metrics = new DisplayMetrics();

((Activity) getContext()).getWindowManager().getDefaultDisplay().getMetrics(metrics);

displayX = metrics.widthPixels;

displayY = metrics.heightPixels;

cropAreaY = displayY / 3;

cropAreaX = displayX;

//Setting up the circles for adjusting

circle1x = displayX / 2;

circle1y = displayY / 2 - (cropAreaY / 2);

circle2x = displayX / 2;

circle2y = displayY / 2 + (cropAreaY / 2);

canvasPaint = new Paint();

canvasPaint.setColor(0xffffff00);

circlePaint = new Paint();

circlePaint.setColor(0xffffff00);

circlePaint.setAntiAlias(true);

rectPaint = new Paint();

rectPaint.setColor(0xffffff00);

rect = new Rect();

rect.set(0, circle1y, 0, displayY - cropAreaY - circle1y);

}

drawCircle可以正常工作并按我的期望进行绘制,我检查了赋予drawRect的数字,并按应有的方式设置了它们,因此我真的不知道这里可能出什么问题.

全视图类

package com.samplersnapshoot.domiq.samplersnapshoot;

import android.app.Activity;

import android.content.Context;

import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

import android.graphics.Canvas;

import android.graphics.Paint;

import android.graphics.PorterDuff;

import android.graphics.Rect;

import android.util.AttributeSet;

import android.util.DisplayMetrics;

import android.util.Log;

import android.view.View;

import java.io.File;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.io.RandomAccessFile;

import java.nio.MappedByteBuffer;

import java.nio.channels.FileChannel;

import java.util.concurrent.CountDownLatch;

/**

* Created by domix on 14.8.2015..

*/

public class CroppingView extends View {

public final String TAG = "DEBUG";

private Canvas cropCanvas;

private Bitmap canvasBitmap;

private int displayX;

private int displayY;

private int circle1x = 0;

private int circle2x = 0;

private int circle1y = 0;

private int circle2y = 0;

private int circleRadiusDp = 20;

private int circleRadius = 100;

private int cropAreaX = 0;

private int cropAreaY = 0;

private Rect rect;

private Paint canvasPaint;

private Paint circlePaint;

private Paint rectPaint;

public CroppingView(Context context, AttributeSet attrs){

super(context, attrs);

setupCropping();

}

private void setupCropping() {

final float scale = getContext().getResources().getDisplayMetrics().density;

circleRadius = (int) (circleRadiusDp * scale + 0.5f);

DisplayMetrics metrics = new DisplayMetrics();

((Activity) getContext()).getWindowManager().getDefaultDisplay().getMetrics(metrics);

displayX = metrics.widthPixels;

displayY = metrics.heightPixels;

cropAreaY = displayY / 3;

cropAreaX = displayX;

//Setting up the circles for adjusting

circle1x = displayX / 2;

circle1y = displayY / 2 - (cropAreaY / 2);

circle2x = displayX / 2;

circle2y = displayY / 2 + (cropAreaY / 2);

canvasPaint = new Paint();

canvasPaint.setColor(0xffffff00);

circlePaint = new Paint();

circlePaint.setColor(0xffffff00);

circlePaint.setAntiAlias(true);

rectPaint = new Paint();

rectPaint.setARGB(50, 135, 225, 255);

}

/*@Override

protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec) {

displayX = widthMeasureSpec;

displayY = heightMeasureSpec;

invalidate();

super.onMeasure(widthMeasureSpec, heightMeasureSpec);

}*/

@Override

protected void onSizeChanged(int w, int h, int oldw, int oldh) {

super.onSizeChanged(w, h, oldw, oldh);

//Getting bitmap

getPath myPath = new getPath();

final File myFile = myPath.getLastModifiedFile();

final CountDownLatch latch = new CountDownLatch(1);

Thread getCanvasBitmap = new Thread() {

public void run() {

BitmapFactory.Options opt = new BitmapFactory.Options();

opt.inDither = true;

opt.inPreferredConfig = Bitmap.Config.ARGB_8888;

int i = 0;

while (canvasBitmap == null && ++i < 500) {

System.gc();

Log.d(TAG, "Trying again: " + i);

canvasBitmap = BitmapFactory.decodeFile(myFile.getAbsolutePath(), opt);

}

latch.countDown();

}

};

getCanvasBitmap.start();

try {

latch.await();

} catch (InterruptedException e) {

e.printStackTrace();

}

//Turning into mutable bitmap

myFile.getParentFile().mkdirs();

RandomAccessFile randomAccessFile = null;

try {

randomAccessFile = new RandomAccessFile(myFile, "rw");

} catch (FileNotFoundException e) {

e.printStackTrace();

}

int bWidth = canvasBitmap.getWidth();

int bHeight = canvasBitmap.getHeight();

FileChannel channel = randomAccessFile.getChannel();

MappedByteBuffer map = null;

try {

map = channel.map(FileChannel.MapMode.READ_WRITE, 0, bWidth*bHeight*4);

} catch (IOException e) {

e.printStackTrace();

}

canvasBitmap.copyPixelsToBuffer(map);

canvasBitmap.recycle();

this.canvasBitmap = Bitmap.createBitmap(bWidth, bHeight, Bitmap.Config.ARGB_8888);

map.position(0);

this.canvasBitmap.copyPixelsFromBuffer(map);

try {

channel.close();

} catch (IOException e) {

e.printStackTrace();

}

try {

randomAccessFile.close();

} catch (IOException e) {

e.printStackTrace();

}

}

protected void onDraw(Canvas canvas) {

canvas.drawBitmap(canvasBitmap, 0, 0, canvasPaint);

Log.d(TAG, "Display vars:" + displayX + " " + displayY);

canvas.drawCircle(circle1x, circle1y, circleRadius, circlePaint);

canvas.drawCircle(circle2x, circle2y, circleRadius, circlePaint);

rect = new Rect();

rect.set(5, circle1y, displayX, displayY - cropAreaY - circle1y);

canvas.drawRect(rect, rectPaint);

}

}

该类的代码编写得还很差,我还没有集成很多功能并对其进行清理.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值