Autore Topic: Drag and Drop  (Letto 243 volte)

Offline Raffyna

  • Utente junior
  • **
  • Post: 103
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    htc wildfire
  • Sistema operativo:
    seven
Drag and Drop
« il: 15 Settembre 2016, 10:53:21 CEST »
0
Ciao a tutti,
avrei nuovamente bisogno di voi:)
Sto realizzando un'app mobile che prevede il seguente comportamento:
La palla blu dovrebbe essere un arco che  ruotara sulla circonferenza rossa (vedi immagine)
Ho quindi creato una view che mi realizza un arco :
Codice: [Seleziona]
public class CircleView extends View {
    Paint paint;

    Canvas c;

    public CircleView(Context context)
    {
        super(context);
     //   invalidate();
    }

    public CircleView(Context context, AttributeSet attrs) {
        super(context, attrs);
        // TODO Auto-generated constructor stub

        //paint.setColor(Color.WHITE);
    }

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

        int cx = getWidth() / 2;
        int cy = getHeight() / 2;
        int radius;
        radius = 400;
        Paint paint = new Paint();
        paint.setStyle(Paint.Style.STROKE);
        paint.setStrokeWidth(45.0f);
        paint.setColor(Color.WHITE);
        paint.setAlpha(100);
        // Use Color.parseColor to define HTML colors
//        canvas.drawCircle(x / 2, y / 2, radius, paint);
        RectF rect = new RectF();
        rect.set(cx- radius, cy - radius, cx + radius, cy + radius);

        canvas.drawArc(rect, -90f, 45f, false, paint);

    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {


                return super.onTouchEvent(event);



    }


e mi sono creata una seconda view che ruota:

Codice: [Seleziona]
public class Rotate extends ImageView {
    Paint paint;
    int direction = 0;
    private float x;
    private float y;
    int degree = 0;
    float a, b, c;
    private float centerX ;
    private float centerY ;
    private float newX ;
    private float newY ;

    public Rotate(Context context)

    {
        super(context);
        // TODO Auto-generated constructor stub
        paint = new Paint();
        paint.setColor(Color.WHITE);
        paint.setStrokeWidth(2);
        paint.setStyle(Paint.Style.STROKE);



        CircleView cv = new CircleView(getContext());
        cv.setLayoutParams(new ViewGroup.LayoutParams(
                ViewGroup.LayoutParams.WRAP_CONTENT,
                ViewGroup.LayoutParams.WRAP_CONTENT));
        cv.setBackgroundColor(Color.RED);
        cv.setVisibility(VISIBLE);


        cv.setDrawingCacheEnabled(true);
        cv.buildDrawingCache();
        Bitmap bm = cv.getDrawingCache();
        this.setImageBitmap(bm);
        this.setBackgroundColor(Color.BLACK);
        //this.setImageResource(R.id.arco);

//        this.setImageResource(R.drawable.arco);

       //this.setImageResource(R.drawable.arco);
    }



    @Override
    protected void onDraw(Canvas canvas)
    {
        int height = this.getHeight();
        int width = this.getWidth();
        centerX = width/2;
        centerY = height/2;
        canvas.rotate(direction, width / 2, height / 2);
        super.onDraw(canvas);

    }

    public void setDirection(int direction) {
        this.direction = direction;
        this.invalidate();
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        System.out.println("now i'm in BEFORE calling MotionEvent.ACTION_MOVE ");

        if (event.getAction() == MotionEvent.ACTION_DOWN) {

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

            newX =  centerX-x;
            newY = centerY-y;

            updateRotation( newX,  newY);

        }
        else if (event.getAction() == MotionEvent.ACTION_MOVE) {

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

            newX =  centerX-x;
            newY = centerY-y;

            updateRotation( newX,  newY);

        }
        else if (event.getAction() == MotionEvent.ACTION_UP) {

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

            newX =  centerX-x;
            newY = centerY-y;

            updateRotation( newX,  newY);

        }
        return true;
    }

    private void updateRotation(float newX2, float newY2) {
        // TODO Auto-generated method stub

        degree = (int)Math.toDegrees(Math.atan2(newY, newX))-90;
        Log.e("DEGREE","DEGREE => "+degree);
        setDirection(degree);


    }

}


il problema è che quando creo l'oggetto CircleView nella seconda view e lo setto come immagine questo non mi viene visualizzato, se invece setto come Immagine della seconda view un oggetto drawable questo m i viene visualizzato e la rotazione effettuata.

Potreste aiutarmi ?
Non capisco cosa c'è che non va.
Grazie.

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 583
  • Respect: +130
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 7 x64
Re:Drag and Drop
« Risposta #1 il: 15 Settembre 2016, 11:54:26 CEST »
0

Non ho capito il problema e non ho capito cosa c'entra il titolo del topic.
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.

Offline Raffyna

  • Utente junior
  • **
  • Post: 103
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    htc wildfire
  • Sistema operativo:
    seven
Re:Drag and Drop
« Risposta #2 il: 15 Settembre 2016, 12:00:49 CEST »
0
dovrei far ruotare su una data circonferenza un cerchio. Facendo riferimento all'immagine che ho allegato vorrei far ruotare il cerchio blu lungo la circonferenza rossa.

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 583
  • Respect: +130
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 7 x64
Re:Drag and Drop
« Risposta #3 il: 15 Settembre 2016, 12:25:37 CEST »
0

Non sono ancora sicuro di aver capito il problema che hai incontrato, comunque dai un'occhiata qui: https://github.com/feeeei/CircleSeekbar
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.

Offline Raffyna

  • Utente junior
  • **
  • Post: 103
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    htc wildfire
  • Sistema operativo:
    seven
Re:Drag and Drop
« Risposta #4 il: 19 Ottobre 2016, 16:25:14 CEST »
0
Ottimo!