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);
}
...