Android: есть ли хорошие ресурсы для создания представлений только Java без XML - PullRequest
1 голос
/ 10 декабря 2011

Я просматривал всю документацию и примеры, найденные в Интернете, но мне еще предстоит найти какие-либо хорошие ресурсы по созданию пользовательских представлений с использованием ТОЛЬКО Java. Я видел много таких, которые описывают их создание с использованием XML и Java.

Я думаю, что с чем я бьюсь больше всего, это относительно простые вещи, такие как: «Могу ли я использовать виджет« TextView »в пользовательском представлении, а также использовать холст для рисования графики? один или другой, но, похоже, не может найти способы сделать оба одновременно.

Например: я хотел бы иметь виджет TextView вверху представления с осязаемой графикой внизу, которая действует как циферблат и рисуется на холсте, который занимает все доступное пространство после добавления TextView. Когда я поворачиваю диск, он увеличивает текст внутри TextView. Я думаю, что-то вроде следующего будет работать ... но это не так и, скорее всего, потому что я упускаю что-то простое.

 public class Dial extends LinearLayout implements View.OnTouchListener
{
    Bitmap _dial;
    protected int bpm = 120;
    TextView txtBpm;    

    /**
     * Constructor
     * @param context
     */
    public Dial(Context context)
    {
        super(context);
        _dial =  BitmapFactory.decodeResource(getResources(), R.drawable.dial_small);
        txtBpm = new TextView(context);
        txtBpm.setTextSize(43);
        txtBpm.setWidth(100);
        txtBpm.setText(String.valueOf(bpm));
        this.addView(txtBpm);
    }
    @Override
    protected void onDraw(Canvas canvas)
    {
        super.onDraw(canvas);
           // Setting the y-pos to 160 so even
           // if the canvas fills the view,
           // the dial will still be below the textview.
        canvas.drawBitmap(_dial, 0,160,null); 
    }   
    @Override
    public void onSizeChanged(int w, int h, int oldW, int oldH)
    {

    }
    /* (non-Javadoc)
     * @see android.view.View.OnTouchListener#onTouch(android.view.View, android.view.MotionEvent)
     */
    @Override
    public boolean onTouch(View arg0, MotionEvent arg1)
    {
        // Do some stuff here to rotate the dial
        return false;
    }

}
...