不在 class 中的 TouchEvent 上工作,它通过 Canvas 编辑 ImageView

not working onTouchEvent in class which edit ImageView via Canvas

我在 class 中使用 onTouchEvent 时遇到问题,它在 mainActivity

中编辑 ImageView

.XML 文件 我使用这个 ImageView

这是 class 图像视图write/rewrite

public class ItemsInPacagesImageView  {

int vsk,vsk2, srk,vskconst,sizetext;
Canvas c;
Paint paint;
ImageView imageview;
Typeface font;
myTrip prvy;
String nazovtripu;
Context context;




public ItemsInPacagesImageView(ImageView img,Context context,String nazovtripu,int pacage) {
    //super(context);

    this.imageview=img;
    this.nazovtripu=nazovtripu;
    this.context=context;

    prvy= DeSerializuj(nazovtripu);
  //  Serializuj(prvy,nazovtripu);



    vsk = context.getResources().getDimensionPixelSize(R.dimen.vyskalist);
    if (prvy.getPocItem()!=pacage){
    vsk= vsk*prvy.getPocItem();}
    vsk2 = context.getResources().getDimensionPixelSize(R.dimen.vyskatext);
    srk =  context.getResources().getDimensionPixelSize(R.dimen.sirkafulllist);
    vskconst =  context.getResources().getDimensionPixelSize(R.dimen.vyskalist2);
    sizetext = context.getResources().getDimensionPixelSize(R.dimen.sizetext);
    font = Typeface.createFromAsset(context.getAssets(), "fonts/Roboto-Light.ttf");
    img.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, vsk));


    Bitmap b = Bitmap.createBitmap(srk,
            vsk, Bitmap.Config.ARGB_8888);
    c = new Canvas(b);
    c.drawColor(Color.WHITE);
    imageview.setImageBitmap(b);


    paint = new Paint();
    paint.setAntiAlias(true);
    paint.setStyle(Paint.Style.FILL);



    for (int i=1;i<50;i++) {
        if (prvy.citajItem(0,i)!=null) {
            int pom=vsk2 + (i-1)*vskconst;
            DalsiPrvok(paint, c, prvy.citajItem(0,i), 450, pom, sizetext,font);
           // prvy.setPocItem(prvy.getPocItem()+1);
        } else {break;}

    }
    imageview.invalidate();

}

protected void DalsiPrvok(Paint paint, Canvas canvas, String text, float xx, float yy, double aa, Typeface font) {

     paint.setColor(Color.BLACK);
    paint.setTypeface(font);
    float textSize = paint.getTextSize();
    paint.setTextSize((float) aa);
    canvas.drawText(text, xx, yy, paint);
    paint.setTextSize(textSize);

}


public boolean onTouchEvent(MotionEvent event) {
    int e = event.getAction(); // vrati parametre udalosti
    if (e == MotionEvent.ACTION_DOWN) {

        paint.setColor(Color.YELLOW);
        c.drawRect(0,0,srk,vsk,paint);
        imageview.invalidate();


    }
    //  HighScoreZ();


    return false;

}


public myTrip DeSerializuj( String odkial) {
    odkial=odkial+".dat";
    myTrip   prvy = null;
    try {
        File file = new File(context.getFilesDir(), odkial);
        FileInputStream fi = new FileInputStream(file);
        ObjectInputStream oi = new ObjectInputStream(fi);
        prvy = (myTrip) oi.readObject();
        oi.close();
        fi.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return prvy;
}

public void Serializuj( myTrip serTrip,String kam){
    kam=kam + ".dat";
    try {
        File file = new File(context.getFilesDir(), kam);
        FileOutputStream fo = new FileOutputStream(file);
        ObjectOutputStream ou = new ObjectOutputStream(fo);
        ou.writeObject(serTrip);
        ou.close();
        fo.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

我有带有细字母的onTouchEvent,因为如果程序运行我不能使用onTouchEvent。我尝试扩展 ImageView 或 View 或我的 MainActivity。 如果我扩展 ↑ onTouchEvent 是很好的字母,但我没有在 onTouchEvent 上获得代码。

所有代码运行 好,这个class 全部写在Imageview on Mainactivity 上。但是我需要在 onTouchEvent 中实现...

我在 MainActivity 上调用这个 class ..

ItemsInPacagesImageView itemimg= new ItemsInPacagesImageView(imglist1,tentocontext,druhy.getNazovTripu(),0);

如果有解决我问题的想法请帮助我。

谢谢

我解决了这段代码的问题。如果我单击 Imageview,此方法会在 ItemsInPacagesImageView.class 上发送 sourondings x 和 y 并重写 imageview。

 imglist1.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
            prvy=DeSerializuj2(nazovtripu);

            switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    itemimg.PociatocneBody(event.getX(),event.getY());

                    break;
                case MotionEvent.ACTION_MOVE:

                    break;
                case MotionEvent.ACTION_UP:
                    itemimg.KonecneBody(event.getX(),event.getY());
                    try {
                        prvy.Zbalene(ktore, itemimg.Spracuj());
                    } catch(IndexOutOfBoundsException e) {}
                    prvy.setHotovo(0);
                    for (int i=1;i<100;i++) {
                        prvy.Kolkomam(0,i);
                    }

                     hotovo1.setText(prvy.getHotovo()+"/"+prvy.getPocItem());



                    break;
            }

            return true;
        }
    });