2016-08-18 1 views
1

J'ai un problème avec l'utilisation onTouchEvent en classe qui modifier ImageView dans MainActivityne fonctionne pas onTouchEvent en classe qui modifier ImageView via Canvas

fichier .XML Je travaille avec ce ImageView

Voici classe qui écrire/réécrire sur imageView

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

J'onTouchEvent la lettre mince parce que je ne peux pas utiliser onTouchEvent si l'exécution du programme. J'ai essayé étend ImageView ou View ou mon MainActivity. Si je prolonge ↑ onTouchEvent était de bonnes lettres mais je n'ai pas reçu de code sur onTouchEvent.

Tout le code fonctionne bien, c'est-à-dire écrire sur Imageview on Mainactivity all. Mais je dois mettre en œuvre dans onTouchEvent ...

j'appelle Thise classe sur MainActivity ..

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

Si S'il vous plaît avoir quelques idées ako résoudre mon problème Aidez-moi.

Merci

+0

J'essaie de mettre en œuvre "implémente GestureDetector.OnGestureListener, GestureDetector.OnDoubleTapListener" mais si je tente debugg programme ne pouvait pas sauter dans detecdor code. – user6651666

Répondre

0

Je résous problème avec ce code. Si je clique sur Imageview cette méthode envoie des sources x et y sur ItemsInPacagesImageView.class et réécrit 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; 
     } 
    });