0

画面をスレートとして使用し、指をチョークとして使用するアプリケーションを開発しましたが、正常に動作しています。しかし、チョークにはさまざまな色の種類を使用したいと考えています。

ここに私のコードがあります:

MyDemo.java

    package com.example.mydemo;
    import android.os.Bundle;
    import android.app.Activity;
    import android.view.View;
    import android.widget.Button;
    import android.widget.LinearLayout;


    public class MyDemo extends Activity {

    private LinearLayout root;
    private Button btnReset;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my_demo);

        root = (LinearLayout) findViewById(R.id.root);
        btnReset = (Button) findViewById(R.id.reset);

        final MyImageView view = new MyImageView(this);
        view.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT));
        root.addView(view);

        btnReset.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                view.reset();
            }
        });
    }

}

MyImageView.java

package com.example.mydemo;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.PointF;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;
import java.util.ArrayList;
import java.util.List;

public class MyImageView extends ImageView implements View.OnTouchListener {

    private int id = -1;
    private Path path;
    private List<Path> paths = new ArrayList<Path>();
    private List<PointF> points = new ArrayList<PointF>();

    boolean multiTouch = false;

    public MyImageView(Context context) {
        super(context);
        this.setOnTouchListener(this);
    }

    public void reset() {
        paths.clear();
        points.clear();
        path = null;
        id = -1;
        invalidate();
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        Paint paint = createPen(Color.BLACK);
        paint.setStyle(Paint.Style.STROKE);
        for (Path path : paths) {
            canvas.drawPath(path, paint);
        }

        for (int i = 0; i < points.size(); i++) {
            PointF p = points.get(i);
            canvas.drawText("" + p.x, p.y, i, createPen(Color.WHITE));
        }
    }

    private PointF copy(PointF p) {
        PointF copy = new PointF();
        copy.set(p);
        return copy;
    }

    public boolean onTouch(View v, MotionEvent event) {
        int action = event.getAction();
        switch (action & MotionEvent.ACTION_MASK) {
            case MotionEvent.ACTION_DOWN:
                multiTouch = false;

                id = event.getPointerId(0);
                PointF p = getPoint(event, id);
                path = new Path();
                path.moveTo(p.x, p.y);
                paths.add(path);

                points.add(copy(p));
                break;
            case MotionEvent.ACTION_POINTER_DOWN:
                multiTouch = true;
                for (int i = 0; i < event.getPointerCount(); i++) {
                    int tId = event.getPointerId(i);
                    if (tId != id) {
                        points.add(getPoint(event,i));
                    }
                }
                break;
            case MotionEvent.ACTION_MOVE:
                if (!multiTouch) {
                    p =getPoint(event, id);
                    path.lineTo(p.x, p.y);
                }
                break;
        }

        invalidate();

        return true;
    }

    private PointF getPoint(MotionEvent event, int i) {
        int index = 0;
        return new PointF(event.getX(index), event.getY(index));
    }

    private Paint createPen(int color) {
        Paint pen = new Paint();
        pen.setColor(color);
        float width = 3;
        pen.setStrokeWidth(width);
        return pen;
    }

}

activity_my_demo.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:id="@+id/root" xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
        >

    <Button android:id="@+id/reset" android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Reset"
            />
</LinearLayout>

チョークに別の色を使用できるように、コードに何を追加または変更する必要があるか教えてもらえますか?

4

2 に答える 2

1

サンプルは Android フォルダーの ..

カラー ピッカーの場合は、次のフォルダーに移動します。

アンドロイド/サンプル/アンドロイド-YOURS_VERSION/ApiDemos

于 2012-09-07T11:15:24.180 に答える
0

これを使用して、このコードを確認してください。あなたの問題が解決されるよりも

      package com.example.changecolor;
      import android.app.Activity;
      import android.content.pm.PackageInfo;
      import android.content.pm.PackageManager;
      import android.graphics.Color;
      import android.os.Bundle;
      import android.view.Menu;
      import android.view.MenuItem;
      import android.view.View;
      import android.widget.Button;
      import android.widget.LinearLayout;
      import android.widget.TextView;


 public class MainActivity extends Activity
  implements View.OnClickListener, UberColorPickerDialog.OnColorChangedListener {

private int mColor = 0xFFFF0000;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //Write the version number
    PackageManager pm = getPackageManager();
    String versionName = "";
    try {
        PackageInfo pi = pm.getPackageInfo("com.keithwiley.android.ubercolorpickerdemo", 0);
        versionName = pi.versionName;
    }
    catch (Exception e) {
    }
    TextView textView = (TextView) findViewById(R.id.version);
    textView.setText(versionName);

    //Initialize the sample
    ((LinearLayout) findViewById(R.id.LinearLayout)).setBackgroundColor(mColor);
    float hsv[] = new float[3];
    Color.colorToHSV(mColor, hsv);
    if (UberColorPickerDialog.isGray(mColor))
        hsv[1] = 0;
    if (hsv[2] < .5)
        ((TextView) findViewById(R.id.sample)).setTextColor(Color.WHITE);
    else ((TextView) findViewById(R.id.sample)).setTextColor(Color.BLACK);

    //Set up the buttons
    Button button = (Button) findViewById(R.id.colorPickerWithTitle);
    button.setOnClickListener(this);

    button = (Button) findViewById(R.id.colorPickerWithToast);
    button.setOnClickListener(this);
}

protected void onPause() {
    super.onPause();
}

protected void onResume() {
    super.onResume();
}

public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);

    return true;
}

public boolean onPrepareOptionsMenu(Menu menu) {
    super.onPrepareOptionsMenu(menu);

    return true;
}

public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    }

    return super.onOptionsItemSelected(item);
}

public void onClick(View v) {
    if (v.getId() == R.id.colorPickerWithTitle)
        new UberColorPickerDialog(this, this, mColor, true).show();
    if (v.getId() == R.id.colorPickerWithToast)
        new UberColorPickerDialog(this, this, mColor, false).show();
}

public void colorChanged(int color) {
    ((LinearLayout) findViewById(R.id.LinearLayout)).setBackgroundColor(mColor=color);

    float hsv[] = new float[3];
    Color.colorToHSV(mColor, hsv);
    //if (UberColorPickerDialog.isGray(mColor))
    //  hsv[1] = 0;
    if (hsv[2] < .5)
        ((TextView) findViewById(R.id.sample)).setTextColor(Color.WHITE);
    else ((TextView) findViewById(R.id.sample)).setTextColor(Color.BLACK);
   }
  }

カラーピッカークラスを使用する

于 2012-11-28T05:10:13.730 に答える