Tôi có một lớp mở rộng view
, xác định bản vẽ tùy chỉnh (điện trở). Tôi muốn nhấp vào nút và thêm view
vào số main layout
. để tôi nhìn thấy điện trở, và nếu tôi bấm một lần nữa nó sẽ thêm một điện trở và như vậy. nhưng tôi không biết cách tốt nhất để tiếp cận vấn đề này. Tôi đã xem xét rất nhiều câu hỏi đề cập đến layoutinflater
, nhưng không có câu hỏi nào trong số đó làm tăng lớp xem tùy chỉnh (có thể tôi đang tìm kiếm điều sai), luôn là tệp xml
. Vì vậy, câu hỏi của tôi là: Làm thế nào tôi có thể thêm nhiều ResistorViews
vào bố cục của tôi để người dùng có thể giao diện (di chuyển, xóa, đánh dấu, v.v.) với họ?Làm cách nào để tăng cấp độ xem tùy chỉnh?
Đây là những gì tôi đã cố gắng:
Hoạt động Class:
public class CircuitSolverActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final Button bAddResistor = (Button) findViewById(R.id.bAdd);
final LinearLayout mLayout = (LinearLayout)findViewById(R.layout.main);
final ResistorView mResistor = new ResistorView(this, 100, 100);
bAddResistor.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mLayout.addView(mResistor);
}
});
}
}
ResistorView lớp:
public class ResistorView extends View{
private Path mSymbol;
private Paint mPaint;
int mX, mY;
//...Override Constructors...
public ResistorView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public ResistorView(Context context, int x, int y){
super(context);
mX = x;
mY = y;
init();
}
private void init() {
mSymbol = new Path();
mPaint = new Paint();
mPaint.setAntiAlias(true);
mPaint.setStrokeWidth(2);
mPaint.setColor(-7829368);
mPaint.setStyle(Paint.Style.STROKE);
mSymbol.moveTo(0.0F, 0.0F);
mSymbol.lineTo(0.0F, 50.0F);
mSymbol.lineTo(16.666666F, 58.333332F);
mSymbol.lineTo(-16.666666F, 75.0F);
mSymbol.lineTo(16.666666F, 91.666664F);
mSymbol.lineTo(-16.666666F, 108.33333F);
mSymbol.lineTo(16.666666F, 124.99999F);
mSymbol.lineTo(-16.666666F, 141.66666F);
mSymbol.lineTo(0.0F, 150.0F);
mSymbol.lineTo(0.0F, 200.0F);
mSymbol.offset(mX, mY);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawPath(mSymbol, mPaint);
}
}
main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:id="@+id/main">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello" />
<Button
android:id="@+id/bAdd"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Add RES" />
</LinearLayout>
Thần ks.
EDIT: SOLVED * Cảm ơn một lần nữa cho sự giúp đỡ. *
Cảm ơn cho câu trả lời đó, tôi đã cố gắng những gì bạn đề nghị, nhưng khi tôi đặt nhanh chóng dòng, tôi không thể sử dụng từ khóa "này" để có được những bối cảnh. Vì vậy, thay vì "này" những gì khác tôi có thể làm gì để có được bối cảnh? – 0gravity
sử dụng getBaseContext() –
Ok, vì vậy tôi đã sử dụng getBaseContext() và mã mà Kabuko đề xuất nhưng tôi gặp lỗi java.lang.NullPointerException trên LogCat. Điều này xảy ra khi tôi nhấp vào nút. – 0gravity