0

在我的 android 应用程序中,我将为鸟素描上色。我需要用各种颜色为鸟的每个部分着色。我用这个位图的屏幕坐标来识别那些部分。现在我需要的是,当用户触摸身体部位的区域时,然后打开另一个具有颜色列表的窗口。为此,我需要将数据从我的 View 类传递到新的 Activity 类。我怎样才能做到这一点?请帮忙!

我的视图类

class BirdColors extends View{

    private Paint paint;
    public Bitmap mBitmap,nBitmap;
    public Canvas canvas;
    private int x,y;
    private CreateColorList colorList;
    int val;

    public BirdColors(Context context) {
        super(context);
        // TODO Auto-generated constructor stub 
        paint=new Paint();
        paint.setAntiAlias(true);   
        paint.setStyle(Paint.Style.STROKE);
        paint.setStrokeJoin(Paint.Join.ROUND);

        mBitmap=BitmapFactory.decodeResource(getResources(), R.drawable.birdsketchfinal2).copy(Config.ARGB_8888, true);


        mBitmap= Bitmap.createScaledBitmap(mBitmap, 230, 230, true);
        //mBitmap=nBitmap;
    }

    @Override
    protected void onDraw(Canvas canvas) {
        // TODO Auto-generated method stub
        super.onDraw(canvas);


        this.canvas=canvas;
        canvas.drawBitmap(mBitmap,0,0, null);
        //canvas.drawText("Shashika", 10, 50, paint);
        canvas.drawText("Screen Cordinates" +x+"x"+y, 10, 220, paint);


    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        // TODO Auto-generated method stub
         switch(event.getAction()){

        case MotionEvent.ACTION_DOWN:

            x=(int)event.getX();
            y=(int)event.getY();

            if((x>5 && x<23)&&(y>30 && y<47)){

                    val=1;
                    //colorList=new CreateColorList(val);
                    //In here I need to pass the val 

            }
            invalidate();
         }
        return true;
    }
4

3 回答 3

2

您可以通过像这样创建界面来做到这一点

public class BirdColors extends View{

   //.........your code ............

// create local object of BirdColorListener

   private BirdColorsListener local;

// create seter/geter methods

   public void setBirdColorListener(BirdColorsListener birdColorListenr){
   this.local = birdColorListenr;
   }
   public BirdColorsListener setBirdColorListener{
     return this.local;
   }


    @Override
public boolean onTouchEvent(MotionEvent event) {
    // TODO Auto-generated method stub
     switch(event.getAction()){

    case MotionEvent.ACTION_DOWN:

        x=(int)event.getX();
        y=(int)event.getY();

        if((x>5 && x<23)&&(y>30 && y<47)){

                val=1;
                //colorList=new CreateColorList(val);
                //In here I need to pass the val 

             if(getBirdColorListener()!=null){
               getBirdColorListener().onBirdTouch(val);
             }


        }
        invalidate();
     }
    return true;
}


   //Add this things

 public interface BirdColorsListener{

   void onBirdTouch(int val);
 }

}

在您的活动中;

public class BirdActivity extends Activity{

  BirdColors bc = new BirdColors();




  protected void onCreate(){

    bc.setBirdColorListener(new BirdColorsListener() {

            @Override
            public void onBirdTouch(int val) {
                // you will get "val"  from your view

            }
        });
  }

}
于 2013-08-31T04:49:21.377 回答
0

构建自己的 Class 时,可以传递外部 Activity 对象的引用,因此当您在自己的视图中保存事件时,可以通过该引用调用方法并将数据传递给它。
如:

Class OuterActivity externd Activity{
 public void setVal(int color){
 }
...
...
 View yourView = new YourView(this);
}

所以在你看来:

在构造函数中:

YourView(Activity inarg){
 this.mOuterActivity =inarg;
}

...//and hold the event

this.mOuterActivity.setVal(0x0099ff);
于 2013-08-31T04:32:06.710 回答
0

我遇到了同样的问题,但其他解决方案(可能是最好的解决方案)对我不起作用,所以我做了一个像这样的全局变量,将数据从我的视图传递回我的活动:

public static ArrayList<Coordinates> coordinates = new ArrayList<Coordinates>();

它在一个名为 GlobalStatic 的单独类中,所以现在我可以在任何地方这样调用该变量:

GlobalStatic.coordinates....

为了让信息进入我的视图,我只是在该视图中创建了一个函数并在我的活动中调用该函数:

在视野中

public void setStatementId(int id) {
    statementId = id;
}

在活动中

BrushView S_map = new BrushView(this);
        S_map.setStatmentId(statementId);

这不是一个很好的解决方案,但它对我有用。

于 2014-03-12T06:56:15.213 回答