我是新发布的堆栈溢出,所以我会尽力在这里描述。
现在我正在玩android studio。我已经设置了一个gridview(我构建了自己的自定义图像适配器),其中包含形成5乘6网格的方形图像,每个网格空间之间有一些填充。我想要做的是能够以编程方式在此gridview顶部绘制一条线(使用画布和绘画)。
我已经查看了很多有关堆栈溢出的帖子,以便尝试解决我的问题,例如:Draw a line on top of existing layout programmatically
当按照^^^上面链接的说明进行操作时,我能够创建一个在ImageView上绘制线条的程序。
但是当我在我的程序中使用类似的代码试图在gridView上绘制一条线时,它只是绘制线而没有别的。
以下是我尝试做的代码片段。这是XML文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<!-- Game layout *er -->
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/gridviewGame"
android:layout_width="match_parent"
android:layout_weight="1"
android:layout_height="0dp"
android:numColumns="5"
android:stretchMode="columnWidth"
android:gravity="center"
/>
<com.example.ella.lazorsgame.DrawView
android:id="@+id/paintView"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</LinearLayout>
这是自定义视图代码:
public class DrawView extends View {
Paint paint = new Paint();
private int strokeWidth = 8;
public DrawView(Context context, AttributeSet attrs) {
super(context, attrs);
paint.setColor(Color.RED);
paint.setStrokeWidth(strokeWidth);
}
@Override
public void onDraw(Canvas canvas) {
canvas.drawLine(0, 0, 300, 300, paint);
}
}
这就是我在主要活动中绘制图像网格的地方(这段代码独立工作......当我尝试在顶部绘制线条时,网格不会出现) :
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_game_setup);
GridView gridview = (GridView) findViewById(R.id.gridviewGame);
blockGridAdapter = new ImageAdapter(this, R.drawable.selectedblock, 30);
// set up grid space object array *er
for (int i = 0; i < BlockSpaces.length; i++) {
BlockSpaces[i] = new BlockSpace(gridview, i);
}
// set up grid visual display on phone screen *er
gridview.setAdapter(blockGridAdapter);
// ------------- INITIAL GAME SETUP (block placements) -------------- *er
blockSetup(levelSelected);
gridview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
updateSelection(position);
}
});
}
感谢您的帮助!如果需要更多信息,请告诉我。
答案 0 :(得分:1)
您没有调用onDraw的超级方法
super.onDraw(canvas);
因此唯一绘制的是行,系统不会处理其他无效的视图,需要重新绘制!
检查一下:http://developer.android.com/training/custom-views/custom-drawing.html