シングルタッチ ペイント用のシンプルな Android プログラムを作成しました。その中には、サイズの異なる 4 種類のペンがあり、そのイメージに基づいてペンのストローク サイズを変更したいと考えています。私は以下のように試しました、助けてください:
main.java
public class MainActivity extends Activity implements OnClickListener {
ImageView pen, color;
SingleTouchView mDrawView;
RelativeLayout layout, layout1;
ImageView remove;
ImageView eraser;
LinearLayout pens;
HorizontalScrollView myplate;
private Paint mPaint, mBitmapPaint;
private Button red, green, blue, cyan, yellow, orange, aqua, black, cofee,
fuchiya, gray, indigo, khaki, lavendar, magenta, mango, maroon,
pista, pink, purple;
private Path mPath;
public Canvas mCanvas;
LinearLayout pen1, pen2, pen3, pen4;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mDrawView = (SingleTouchView) findViewById(R.id.myview);
layout1 = (RelativeLayout) findViewById(R.id.layout1);
layout = (RelativeLayout) findViewById(R.id.layout);
pen = (ImageView) findViewById(R.id.pen);
pens = (LinearLayout) findViewById(R.id.linear);
pens.setVisibility(View.GONE);
pen1 = (LinearLayout) findViewById(R.id.pen1);
pen2 = (LinearLayout) findViewById(R.id.pen2);
pen3 = (LinearLayout) findViewById(R.id.pen3);
pen4 = (LinearLayout) findViewById(R.id.pen4);
color = (ImageView) findViewById(R.id.color);
myplate = (HorizontalScrollView) findViewById(R.id.myplate);
// colors.........!!!!
red = (Button) findViewById(R.id.red);
green = (Button) findViewById(R.id.green);
blue = (Button) findViewById(R.id.blue);
orange = (Button) findViewById(R.id.orange);
yellow = (Button) findViewById(R.id.yellow);
cyan = (Button) findViewById(R.id.cyan);
black = (Button) findViewById(R.id.black);
cofee = (Button) findViewById(R.id.cofee);
fuchiya = (Button) findViewById(R.id.fuchiya);
gray = (Button) findViewById(R.id.gray);
indigo = (Button) findViewById(R.id.indigo);
khaki = (Button) findViewById(R.id.khaki);
lavendar = (Button) findViewById(R.id.lavendar);
magenta = (Button) findViewById(R.id.magenta);
mango = (Button) findViewById(R.id.mango);
maroon = (Button) findViewById(R.id.maroon);
pista = (Button) findViewById(R.id.pista);
pink = (Button) findViewById(R.id.pink);
purple = (Button) findViewById(R.id.purple);
red.setOnClickListener(this);
green.setOnClickListener(this);
blue.setOnClickListener(this);
orange.setOnClickListener(this);
yellow.setOnClickListener(this);
cyan.setOnClickListener(this);
black.setOnClickListener(this);
cofee.setOnClickListener(this);
fuchiya.setOnClickListener(this);
gray.setOnClickListener(this);
indigo.setOnClickListener(this);
khaki.setOnClickListener(this);
lavendar.setOnClickListener(this);
magenta.setOnClickListener(this);
mango.setOnClickListener(this);
maroon.setOnClickListener(this);
pista.setOnClickListener(this);
pink.setOnClickListener(this);
purple.setOnClickListener(this);
eraser = (ImageView) findViewById(R.id.eraser);
remove = (ImageView) findViewById(R.id.remove);
pen.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
// layout.addView(mDrawView);
pens.setVisibility(View.VISIBLE);
}
});
pens.setVisibility(View.GONE);
pen1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mDrawView.setPen(SingleTouchView.DrawingPens.PEN_1);
pens.setVisibility(View.GONE);
}
});
pen2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mDrawView.setPen(SingleTouchView.DrawingPens.PEN_2);
pens.setVisibility(View.GONE);
}
});
pen3.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
pens.setVisibility(View.GONE);
mDrawView.setPen(SingleTouchView.DrawingPens.PEN_3);
}
});
pen4.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
pens.setVisibility(View.GONE);
mDrawView.setPen(SingleTouchView.DrawingPens.PEN_4);
}
});
remove.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
layout.removeView(mDrawView);
mDrawView = new SingleTouchView(MainActivity.this);
layout.addView(mDrawView);
}
});
eraser.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mBitmapPaint.setColor(Color.TRANSPARENT);
mPath.reset();
mDrawView.invalidate();
}
});
color.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
myplate.setVisibility(View.VISIBLE);
}
});
}
// /colorpicker................!
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.black:
myplate.setVisibility(View.GONE);
mDrawView.setColor(SingleTouchView.DrawingColors.Black);
System.out.println("==============="+SingleTouchView.DrawingColors.Black+"=========================");
break;
case R.id.blue:
myplate.setVisibility(View.GONE);
//mDrawView.setColor(SingleTouchView.DrawingColors.Blue);
break;
case R.id.cofee:
myplate.setVisibility(View.GONE);
break;
case R.id.cyan:
myplate.setVisibility(View.GONE);
break;
case R.id.fuchiya:
myplate.setVisibility(View.GONE);
break;
case R.id.gray:
myplate.setVisibility(View.GONE);
break;
case R.id.green:
myplate.setVisibility(View.GONE);
break;
case R.id.indigo:
myplate.setVisibility(View.GONE);
break;
case R.id.khaki:
myplate.setVisibility(View.GONE);
break;
case R.id.lavendar:
myplate.setVisibility(View.GONE);
break;
case R.id.magenta:
myplate.setVisibility(View.GONE);
break;
case R.id.mango:
myplate.setVisibility(View.GONE);
break;
case R.id.maroon:
myplate.setVisibility(View.GONE);
break;
case R.id.orange:
myplate.setVisibility(View.GONE);
break;
case R.id.pink:
myplate.setVisibility(View.GONE);
break;
case R.id.pista:
myplate.setVisibility(View.GONE);
break;
case R.id.purple:
myplate.setVisibility(View.GONE);
break;
case R.id.red:
myplate.setVisibility(View.GONE);
break;
case R.id.yellow:
myplate.setVisibility(View.GONE);
break;
}
}
}
シングルタッチ.java
public class SingleTouchView extends View {
public static int width;
public int height;
public Bitmap mBitmap;
public Canvas mCanvas;
public Path mPath;
public Paint mBitmapPaint;
Context context;
public Paint mPaint;
public Paint circlePaint;
public Path circlePath;
public enum DrawingPens {
PEN_1(6), PEN_2(4), PEN_3(2), PEN_4(1);
public Paint mPaint;
private DrawingPens(final int width) {
mPaint = new Paint();
mPaint.setAntiAlias(true);
mPaint.setStrokeWidth(width);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeJoin(Paint.Join.ROUND);
}
Paint getPaint() {
return mPaint;
}
}
public enum DrawingColors{
Black(Color.parseColor("#000000")),Blue(Color.parseColor("#0000FF")),Cofee(Color.parseColor("#D2691E")),Cyan(Color.parseColor("#00FFFF"))
,Fuchiya(Color.parseColor("#FF00FF")),Gray(Color.parseColor("#808080")),Green(Color.parseColor("#00FF00")),Indigo(Color.parseColor("#4B0082")),
Khaki(Color.parseColor("#F0E68C")),Lavendar(Color.parseColor("#E6E6FA")),Magenta(Color.parseColor("#FF00FF")),Mango(Color.parseColor("#FF8C00"))
,Maroon(Color.parseColor("#800000")),Orange(Color.parseColor("#FFA500")),Pink(Color.parseColor("#FFC0CB")),Pista(Color.parseColor("#9ACD32")),
Purple(Color.parseColor("#800080")),Red(Color.parseColor("#FF0000")),Tan(Color.parseColor("#0000A0")),Yellow(Color.parseColor("#FFD801"));
public Paint mPaint;
private DrawingColors(final int color) {
mPaint = new Paint();
mPaint.setAntiAlias(true);
mPaint.setStrokeWidth(width);
mPaint.setColor(color);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeJoin(Paint.Join.ROUND);
}
Paint getPaint() {
return mPaint;
}
}
public SingleTouchView(final Context context) {
super(context);
init(context);
}
public SingleTouchView(final Context context, final AttributeSet attrs) {
super(context, attrs);
init(context);
mBitmap = Bitmap.createBitmap(400, 400, Bitmap.Config.ARGB_8888);
mCanvas = new Canvas(mBitmap);
mPath = new Path();
mBitmapPaint = new Paint(Paint.DITHER_FLAG);
mPaint = new Paint();
mPaint.setAntiAlias(true);
mPaint.setDither(true);
mPaint.setColor(0xFFFF0000);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeJoin(Paint.Join.ROUND);
mPaint.setStrokeCap(Paint.Cap.ROUND);
mPaint.setStrokeWidth(12);
}
public SingleTouchView(final Context context, final AttributeSet attrs,
final int defStyle) {
super(context, attrs, defStyle);
init(context);
}
private ConcurrentLinkedQueue<Map.Entry<Path, DrawingPens>> mPaths = new ConcurrentLinkedQueue<Map.Entry<Path, DrawingPens>>();
private ConcurrentLinkedQueue<Map.Entry<Path, DrawingColors>> mPaths1 = new ConcurrentLinkedQueue<Map.Entry<Path, DrawingColors>>();
private Path mCurrentPath;
private void init(final Context context) {
setPen(DrawingPens.PEN_1);
}
@Override
public void onDraw(Canvas canvas) {
super.onDraw(canvas);
for (Map.Entry<Path, DrawingPens> entry : mPaths) {
canvas.drawPath(entry.getKey(), entry.getValue().getPaint());
}
}
@Override
public boolean onTouchEvent(MotionEvent me) {
float eventX = me.getX();
float eventY = me.getY();
switch (me.getAction()) {
case MotionEvent.ACTION_DOWN:
mCurrentPath.moveTo(eventX, eventY);
return true;
case MotionEvent.ACTION_MOVE:
mCurrentPath.lineTo(eventX, eventY);
break;
case MotionEvent.ACTION_UP:
break;
}
invalidate();
return true;
}
public void setPen(final DrawingPens pen) {
mCurrentPath = new Path();
mPaths.add(new AbstractMap.SimpleImmutableEntry<Path, DrawingPens>(
mCurrentPath, pen));
}
public void eraser() {
mPaint = new Paint();
}
public void setColor(final DrawingColors color ) {
mCurrentPath = new Path();
mPaths1.add(new AbstractMap.SimpleImmutableEntry<Path, DrawingColors>(
mCurrentPath, color));
}
}