【问题标题】:How to activate the method to draw from a button?如何激活从按钮绘制的方法?
【发布时间】:2015-05-16 11:28:31
【问题描述】:

我对 android 还很陌生。我有这段代码要在我的应用程序中绘制,但我想用一个按钮激活它。如果我单击操作栏按钮,我应该绘制,否则我不应该这样做。我该怎么做?

//DRAW
public class CustomView extends View {
    Bitmap mBitmap;
       Paint paint;
        Path path;
       public CustomView(Context context) {
           super(context);
      mBitmap = Bitmap.createBitmap(640, 1024, Bitmap.Config.ARGB_8888);
           paint = new Paint();
                   path= new Path();
           paint.setColor(Color.YELLOW);
           //paint.setStyle(Style.FILL); //if I want to fill but I don't
           paint.setStyle(Style.STROKE);
           paint.setStrokeWidth(3);
       }

protected void onDraw(Canvas canvas) {

    super.onDraw(canvas);
     canvas.drawPath(path,paint);
      canvas.drawCircle(x, y, 25, paint);
   }

public boolean onTouchEvent(MotionEvent event) {
       int action = event.getAction();
       switch (action){
case MotionEvent.ACTION_DOWN:
    path.moveTo(event.getX(), event.getY());
    path.lineTo(event.getX(), event.getY());
     break;
   case MotionEvent.ACTION_MOVE:
       x = event.getX();
       y = event.getY();
       path.lineTo(x, y);
       invalidate();
     break;
   case MotionEvent.ACTION_UP:
       path.lineTo(event.getX(), event.getY());
     break;
   case MotionEvent.ACTION_CANCEL:
     break;
   default:
     break;}
       return true;
   }}


@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.menu_edit:
                Log.i("ActionBar", "Edit");

// FROM HERE I WANT TO ACTIVATE

            return true;
        case R.id.menu_save:
            Log.i("ActionBar", "Guardar!");;
            return true; 
        default:
            return super.onOptionsItemSelected(item);
    }

编辑:我的应用程序由文本组成。我想让用户在这些文本下划线,要做到这一点,您必须首先启用触摸操作栏按钮。如果您不想再下划线,请再次单击该按钮。

【问题讨论】:

    标签: android onclick draw activation


    【解决方案1】:

    在要重绘的视图上调用 invalidate()

    【讨论】:

    • 我在 swich 中使用了这段代码来激活:layout=(FrameLayout)findViewById(R.id.layout); layout.addView(new CustomView(Objeto.this));布局。无效();。现在我得看看如何禁用它。谢谢 Gabe。
    • 你知道当我再次点击按钮时如何停用或停止onDraw吗?我不知道怎么做。
    • 如果你想让它返回到以前的状态,你必须让它查看一些布尔标志来确定是否绘制这些东西,并让你的按钮切换那个标志然后调用无效。
    • 是的,我尝试过这样做,但没有成功。这是代码: case R.id.menu_edit: layout=(FrameLayout)findViewById(R.id.layout); layout.addView(new CustomView(Objeto.this)); if(activarLapiz==true){ layout.invalidate();激活拉皮兹=假; } 其他{ activarLapiz=true;}。你怎么看?感谢您的帮助
    • 在两个分支中都无效。
    【解决方案2】:

    如果我明白你的意思,你需要做一些简单的任务。

    首先 OnDraw() 方法是由它自己调用的,所以如果你在 onDraw() 方法中执行这个动作,你就不能手动执行一个动作。我建议创建一个处理这些操作的方法。所以尝试删除这 2 行:

    canvas.drawPath(path,paint); canvas.drawCircle(x, y, 25, paint);

    其次,您必须添加一个onClickListener 附加到您要对这些操作负责的按钮。如果你不知道怎么做这个问题,我会在这里创建一个教程。 如果这些不起作用,我将不胜感激帮助您解决其他问题。

    【讨论】:

    • onDraw 可以通过使视图无效来强制执行。如果他想让他的绘制画出一个圆圈和一条路径,那就是他需要这些线条的地方。我认为您不理解他的问题 - 他想强制菜单项重新绘制他的视图。
    • 我试过这个但不起作用:我用 canvas.drawPath(path,paint); 创建了一个方法; canvas.drawCircle(x, y, 25, 油漆);我创建了一个布尔值,在 onOptionsItemSelected 方法中为真,那么我应该可以绘制,但我不能。这就是你告诉我的吗?对不起,如果我的英语不是很好
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-07
    • 2019-12-19
    • 1970-01-01
    • 2020-01-18
    • 1970-01-01
    • 2021-08-13
    相关资源
    最近更新 更多