疯狂android讲义第二版,355页的代码,我在android studio 1.3RC中测试。自定义DrawView的cacheImage不能随屏幕大小自动调整大小,只能画一小部分,大家帮忙看看怎么根据屏幕大小创建对应大小的cacheImage。
如下是自定义的DrawViwe
-----------------------------------------------------------------------------------------------------------------------------------------------------------
package cn.zjwyj.sketchpad;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
/**
* Created by Dragon on 2015/7/30.
*/
public class DrawView extends View {
float prex;
float prey;
private Path path;
public Paint paint;
private int ViewWidth = 100;
private int ViewHeigh = 200;
Bitmap cacheBitmap = null;
Canvas cacheCanvas = null;
public DrawView(Context context, AttributeSet attrs) {
super(context, attrs);
//----------------------------------
cacheBitmap = Bitmap.createBitmap(ViewWidth, ViewHeigh, Bitmap.Config.ARGB_8888);
cacheCanvas = new Canvas();
path = new Path();
cacheCanvas.setBitmap(cacheBitmap);
paint = new Paint(Paint.DITHER_FLAG);
paint.setColor(Color.RED);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(1);
paint.setAntiAlias(true);
paint.setDither(true);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
float x = event.getX();
float y = event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
path.moveTo(x, y);
prex = x;
prey = y;
break;
case MotionEvent.ACTION_MOVE:
path.quadTo(prex, prey, x, y);
prex = x;
prey = y;
break;
case MotionEvent.ACTION_UP:
cacheCanvas.drawPath(path, paint);
path.reset();
break;
}
invalidate();
return true;
}
@Override
protected void onDraw(Canvas canvas) {
Paint bmpPaint = new Paint();
canvas.drawBitmap(cacheBitmap, 0, 0, bmpPaint);
canvas.drawPath(path, paint);
}
public void setViewWidth(int viewWidth) {
ViewWidth = viewWidth;
}
public void setViewHeigh(int viewHeigh) {
ViewHeigh = viewHeigh;
}
}
---------------------------------------------------------------------------------------------------
在程序入口处根据窗口大小写了setViewHeigh,甚至重新创建了cacheImage,或者调用cacheImage.setHeigh,都不好使,请大家给出帮个忙
如下是自定义的DrawViwe
-----------------------------------------------------------------------------------------------------------------------------------------------------------
package cn.zjwyj.sketchpad;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
/**
* Created by Dragon on 2015/7/30.
*/
public class DrawView extends View {
float prex;
float prey;
private Path path;
public Paint paint;
private int ViewWidth = 100;
private int ViewHeigh = 200;
Bitmap cacheBitmap = null;
Canvas cacheCanvas = null;
public DrawView(Context context, AttributeSet attrs) {
super(context, attrs);
//----------------------------------
cacheBitmap = Bitmap.createBitmap(ViewWidth, ViewHeigh, Bitmap.Config.ARGB_8888);
cacheCanvas = new Canvas();
path = new Path();
cacheCanvas.setBitmap(cacheBitmap);
paint = new Paint(Paint.DITHER_FLAG);
paint.setColor(Color.RED);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(1);
paint.setAntiAlias(true);
paint.setDither(true);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
float x = event.getX();
float y = event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
path.moveTo(x, y);
prex = x;
prey = y;
break;
case MotionEvent.ACTION_MOVE:
path.quadTo(prex, prey, x, y);
prex = x;
prey = y;
break;
case MotionEvent.ACTION_UP:
cacheCanvas.drawPath(path, paint);
path.reset();
break;
}
invalidate();
return true;
}
@Override
protected void onDraw(Canvas canvas) {
Paint bmpPaint = new Paint();
canvas.drawBitmap(cacheBitmap, 0, 0, bmpPaint);
canvas.drawPath(path, paint);
}
public void setViewWidth(int viewWidth) {
ViewWidth = viewWidth;
}
public void setViewHeigh(int viewHeigh) {
ViewHeigh = viewHeigh;
}
}
---------------------------------------------------------------------------------------------------
在程序入口处根据窗口大小写了setViewHeigh,甚至重新创建了cacheImage,或者调用cacheImage.setHeigh,都不好使,请大家给出帮个忙