2014-07-10 24 views
1

我几乎用我在Eclipse中制作的应用程序完成。现在可以在操作栏中选择笔画宽度,颜色和清晰屏幕。 我遇到的问题是每当我单击操作栏时画布重置并且我失去了绘画,当我选择不同的颜色或笔画大小时,也会发生这种情况。当我启动应用程序时,我必须先点击操作栏才能绘制。 这是我的问题。选择其他颜色时,绘制笔触宽度更改为默认值

此外,当我选择不同的笔触大小时,黑色笔触大小会正确更改,但是当我以后更改颜色时,笔画大小调整为默认值。

以下是我的代码。我希望有人能够帮助我。谢谢!

SingleTouchActivity.java

public class SingleTouchActivity extends Activity { 

    @Override 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 

     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     SingleTouchEventView stev = new SingleTouchEventView(this, null); 
      setContentView(stev); 
      // Handle action bar item clicks here. The action bar will 
      // automatically handle clicks on the Home/Up button, so long 
      // as you specify a parent activity in AndroidManifest.xml. 

      int id = item.getItemId(); 

      if (id == R.id.ResetAction) { 
       invalidate(); 
        return true; 
      }if (id == R.id.LijnDun) { 
       stev.setStrokeWidth(4); 
        return true; 
      }if (id == R.id.LijnDik) { 
       stev.setStrokeWidth(5); 
        return true; 
      } 
      if (id == R.id.LijnGroen) { 
       stev.setColor(3); 
        return true; 
      } 
      if (id == R.id.LijnBlauw) { 
        stev.setColor(2); 
        return true; 
      } 
      if (id == R.id.LijnRood) { 
         stev.setColor(1); 

         return true; 
      } 

      return super.onOptionsItemSelected(item); 
    } 

    private void invalidate() { 
     // TODO Auto-generated method stub 

    } 

    /** 
    * A placeholder fragment containing a simple view. 
    */ 
    public static class PlaceholderFragment extends Fragment { 

     public PlaceholderFragment() { 
     } 

     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
       Bundle savedInstanceState) { 
      View rootView = inflater.inflate(R.layout.main_fragment, container, 
        false); 
      return rootView; 
     } 
    } 

} 

SingleTouchEventView.Java

public class SingleTouchEventView extends View { 
    private Paint paint = new Paint(); 
    private Path path = new Path(); 

    public SingleTouchEventView(Context context, AttributeSet attrs) { 
    super(context, attrs); 

    paint.setAntiAlias(true); 
    paint.setStrokeWidth(5f); 
    paint.setColor(Color.BLACK); 
    paint.setStyle(Paint.Style.STROKE); 
    paint.setStrokeJoin(Paint.Join.ROUND); 

    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
    canvas.drawPath(path, paint); 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
    float eventX = event.getX(); 
    float eventY = event.getY(); 

    switch (event.getAction()) { 
    case MotionEvent.ACTION_DOWN: 
     path.moveTo(eventX, eventY); 
     return true; 
    case MotionEvent.ACTION_MOVE: 
     path.lineTo(eventX, eventY); 
     break; 
    case MotionEvent.ACTION_UP: 
     // nothing to do 
     break; 
    default: 
     return false; 
    } 

    // Schedules a repaint. 
    invalidate(); 
    return true; 
    } 

    // KLEUR switch statement 
    void setColor(int i){ 

     switch (i){ 
     case 1: 

      paint.setColor(Color.RED); 

     break; 

     case 2: 

      paint.setColor(Color.BLUE); 

     break; 

     case 3: 

      paint.setColor(Color.GREEN); 

     break; 

     default: 

      paint.setColor(Color.BLACK); 

     break; 

     } 

    } 
    // LIJN DIKTE switch statement 
    void setStrokeWidth(int k){ 

     switch (k){ 
     case 5: 

      paint.setStrokeWidth(12f); 

     break; 

     case 4: 

      paint.setStrokeWidth(5f); 

     break; 

     default: 

      paint.setStrokeWidth(5f); 

     break; 

     } 

    } 
} 

回答

0

在onOptionsItemSelected,你每次都创建视图的新实例。这会将所有值重置为默认值,然后执行您的选项按钮操作。您必须对视图的现有实例执行更改。让你的视图单身。

相关问题