Android: как реализовать холст рисует в существующий вид в XML

У меня есть XML файл в моей программе, например:

 <LinearLayout android:orientation="horizontal"
                  android:layout_width="fill_parent"
                  android:layout_height="fill_parent"
                  android:layout_weight="1">
            <LinearLayout android:layout_width="fill_parent"
                       android:layout_height="fill_parent"
                       android:layout_weight="1"
                       android:background="#ef3"
                       android:id="@+id/img01"/>
            <LinearLayout android:layout_width="fill_parent"
                       android:layout_height="fill_parent"
                       android:layout_weight="1"
                       android:background="#E8A2B4"
                       android:id="@+id/img02"/>
    </LinearLayout>

Кроме того, у меня есть функция рисования холста в моей деятельности.

public class ImgTestActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }

    private class iniView extends View {

        public iniView(Context context) {
            super(context);
            // TODO Auto-generated constructor stub
        }

        @Override
        protected void onDraw(Canvas canvas) {
            // TODO Auto-generated method stub
            super.onDraw(canvas);
            //set background color
            canvas.drawColor(Color.WHITE);
            Paint paint = new Paint();
            paint.setAntiAlias(true);
            paint.setColor(Color.RED);
            paint.setStyle(Paint.Style.STROKE);
            paint.setStrokeWidth(3);
            canvas.drawCircle(this.getWidth()/2, this.getHeight()/2, 30, paint);
        }

    }
}

Я прочитал несколько статей из Интернета. Некоторые люди создают там свой вид в действии и устанавливают в него краску.

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        MyView myView=new MyView(this);
        setContentView(myView);
    }

Но я хочу настроить свою краску на два LinearLayout.

<LinearLayout android:layout_width="fill_parent"
                       android:layout_height="fill_parent"
                       android:layout_weight="1"
                       android:background="#ef3"
                       android:id="@+id/img01"/>
            <LinearLayout android:layout_width="fill_parent"
                       android:layout_height="fill_parent"
                       android:layout_weight="1"
                       android:background="#E8A2B4"
                       android:id="@+id/img02"/>

Как я могу это сделать? (Я хочу нарисовать два одинаковых круга в центре этой двух линейной компоновки)

Ответ 1

Одним из решений было бы извлечь initView (должен быть BTL CamelCase), а затем ввести его в xml с полным именем пути класса представления как имя тега. Давайте посмотрим пример. Получаемый класс должен выглядеть следующим образом:

package your.package;

// imports

private class CircleView extends View {

    public iniView(Context context) {
        super(context);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        // your painting stuff
    }

}

И xml должен выглядеть примерно так:

<your.package.CircleView 
     android:layout_width="fill_parent"
     android:layout_height="fill_parent"
     android:layout_weight="1"
     android:background="#ef3"
     android:id="@+id/img01"/>
<your.package.CircleView 
     android:layout_width="fill_parent"
     android:layout_height="fill_parent"
     android:layout_weight="1"
     android:background="#E8A2B4"
     android:id="@+id/img02"/>

Хотя вы можете посмотреть доступные доступные ресурсы в Android: http://developer.android.com/guide/topics/resources/drawable-resource.html

Существует Shape Drawable, который может позволить вам делать то, что вы хотите более простым способом и отделен от бизнес-логики Activity.

Надеюсь, что это поможет

Ответ 2

Вы можете отобразить представление xml, используя это:

View viewalias = (View) this.findViewById(R.layout.yourxml);, затем нарисуйте его, как вам нравится, для получения дополнительной информации см. this.

Ответ 3

попробуйте следующее:

...
import android.util.AttributeSet;
...
public iniView(Context context, AttributeSet attributeSet) {
    super(context, attributeSet);
}
...