2012-09-07 66 views
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> 

任何人都可以告訴我應該在代碼中添加或更改哪些內容,以便我可以爲Chalk使用不同的顏色?

回答

1

你可以把樣品中的Android文件夾的..

對於顏色選擇器去這個文件夾中:

的Android /樣品/ Android的YOURS_VERSION/ApiDemos

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); 
    } 
    } 

,並使用顏色選擇器類