0

Ich entschied mich zu versuchen, benutzerdefinierte Ansicht zu erstellen. Es ist notwendig, einen Editor mit einigen Funktionen (Drehen, Zoomen, Transformieren, Hinzufügen von Überlagerungen) auf beiden Ebenen (oben, unten) zu erstellen und es möglich, den Teiler zu verschieben, um ein Layout für eine bequeme Bildbearbeitung zu erhöhen. Gibt es ähnliche Arbeiten oder kann sich jemand vorstellen wie man richtig anfängt?Wie erstellt man doppelte benutzerdefinierte Ansicht für Android?

how it should be

Antwort

1

Ich habe ein benutzerdefiniertes Layout gemacht, das tut, was Sie gefragt.
Verwenden Sie es wie Codierung

public class BicontLayout extends LinearLayout { 

    private View divider; 
    private View vTop, vBottom; 
    private LinearLayout.LayoutParams vTopParams, vBottomParams; 
    private int dividerClickableHeight; 

    public BicontLayout(Context ctx, View viewTop, View viewBottom) { 
     super(ctx); 

     this.vTop = viewTop; 
     this.vBottom = viewBottom; 

     setOrientation(LinearLayout.VERTICAL); 
     setWeightSum(1f); 

     vTopParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 0, 0.5f); 
     vBottomParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 0, 0.5f); 
     addView(vTop, vTopParams); 

     divider = new View(ctx); 
     divider.setBackgroundColor(Color.RED); 

     dividerClickableHeight = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 50f, getResources().getDisplayMetrics()); 
     addView(divider, LinearLayout.LayoutParams.MATCH_PARENT, 3); 
     addView(vBottom, vBottomParams); 

    } 

    private float yStartTouch; 
    private float yStartWeight; 
    private boolean isDragging; 
    private int[] dividerLocation = new int[2]; 

    @Override 
    public boolean onInterceptTouchEvent(MotionEvent ev) { 
     if(onTouchEvent(ev)) return true; 
     return super.onInterceptTouchEvent(ev); 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent me) { 
     switch(me.getAction()) { 
      case MotionEvent.ACTION_DOWN: 
       yStartTouch = me.getRawY(); 
       yStartWeight = vTopParams.weight; 
       divider.getLocationOnScreen(dividerLocation); 
       isDragging = Math.abs(dividerLocation[1]-yStartTouch) < dividerClickableHeight/2; 
       break; 
      case MotionEvent.ACTION_MOVE: 
       if(!isDragging) break; 

       float yDelta = me.getRawY() - yStartTouch; 
       float yDeltaProg = yDelta/BicontLayout.this.getHeight(); 
       float yNewProg = yStartWeight + yDeltaProg; 
       if(yNewProg<0.1f) yNewProg=0.1f; 
       if(yNewProg>0.9f) yNewProg=0.9f; 

       vTopParams.weight = yNewProg; 
       vTop.setLayoutParams(vTopParams); 

       vBottomParams.weight = 1f - yNewProg; 
       vBottom.setLayoutParams(vBottomParams); 

       break; 
      case MotionEvent.ACTION_UP: 
       isDragging=false; 
       break; 
     } 

     if(isDragging) return true; 
     return super.onTouchEvent(me); 
    } 

} // author Tiziano Munegato 

Anwendungsbeispiel

// vTop : top view 
// vBottom : bottom view 
BicontLayout doubleLayout = new BicontLayout(getContext(), vTop, vBottom); 
setContentView(doubleLayout); 

Glücklich im Beispiel

git repository here

preview programmatisch!

+0

Vielen Dank, MAN)))) Sie machen meinen Tag –

+0

Sie sind derjenige, der mit dieser Einstellung meinen Tag macht! –

+0

Kannst du mich bitte auf Skype hinzufügen? Konto: "gewalttätig.ua". Ich habe Probleme, die ich beim Hinzufügen von Karten in Ihrem benutzerdefinierten Layout nicht lösen kann –

Verwandte Themen