JavascriptProva

giovedì 8 settembre 2016

Realizzazione di un'immagine di "folder" su un LinearLayout (in funzione di J-Communicator)

Provo a disegnare un semplice rettangolo bordato, con la tecnica della figura più piccola sovrapposta a quella più grande.
Dunque quelle elucubrazioni geometriche che ho messo in opera prima possono essere eliminate. Ho scelto la soluzione più complicata credendo che con un'immagine più complessa di "cartella" e non di semplice rettangolo ci sarebbero state complicazioni, e anche perché ero indeciso se fare un FILL o uno STROKE.
Opto per il FILL.

Ecco, dopo varie prove sono riuscito a realizzare l'immagine di una cartella con bordo grigio su sfondo nero:

MyLayout:
public class MyLayout extends LinearLayout {

    Paint paint;
    Context context;

    public MyLayout(Context context) {
        super(context);
        this.context=context;
        setWillNotDraw(false);
        paint = new Paint();
    }

    @Override
    protected void onDraw(Canvas canvas){
        int bw=10;
        super.onDraw(canvas);
        paint.setStyle(Paint.Style.FILL);
        paint.setColor(Color.GRAY);

        //rettangolo principale
        canvas.drawRect(0,30,getWidth(),getHeight(),paint);

        //linguetta
        canvas.drawRect(0,0,90,100,paint);


        paint.setColor(Color.WHITE);

        //rettangolo principale interno
        canvas.drawRect(0+bw,30+bw,getWidth()-bw,getHeight()-bw,paint);

        //linguetta interna
        canvas.drawRect(0+bw,0+bw,90-bw,100,paint);
    }

}


MainActivity:
public class MainActivity extends AppCompatActivity {


    RelativeLayout mainLayout;
    MyLayout myLayout;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mainLayout=(RelativeLayout)findViewById(R.id.mainLayout);

        myLayout=new MyLayout(this);
        mainLayout.addView(myLayout);

        RelativeLayout.LayoutParams params=
                new RelativeLayout.LayoutParams(
                        RelativeLayout.LayoutParams.WRAP_CONTENT,
                        RelativeLayout.LayoutParams.WRAP_CONTENT);

        params.width=200;
        params.height=200;
        params.leftMargin=100;
        params.topMargin=100;
        myLayout.setLayoutParams(params);
    }

}
Sarebbe il caso di usare, nel codice di MyLayout, valori delle dimensioni dei rettangoli in percentuale, in modo da adattarsi automaticamente a ogni dimensione data al layout.
Si può consentire la scelta delle dimensioni del bordo volta per volta (e sarà meglio metterlo come parametro da passare al costruttore), mentre per le dimensioni relative della linguetta rispetto alla larghezza della pagina, andrebbe posto un valore percentuale.

Nessun commento:

Posta un commento