2015-06-14 4 views
0

Я новичок в публикации на переполнении стека, поэтому я сделаю все возможное, чтобы описать здесь.Как нарисовать линию над GridView программно

Прямо сейчас я играю с андроид-студией. Я настроил 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); 
      } 
     }); 
    } 

Благодарим за помощь! Дайте мне знать, нужна ли дополнительная информация.

ответ

1

Вы не вызывая супер метод OnDraw

super.onDraw(canvas); 

, таким образом, единственное, что нарисовано это линия и система не обрабатывает ваши другие взгляды, аннулированных и нуждается де перерисовывается !! !

проверить это: http://developer.android.com/training/custom-views/custom-drawing.html