在GridView前面的drawingView - Android

时间:2014-07-03 10:42:02

标签: java android gridview drawing

我正在构建一个应用程序,当一个人在屏幕上拖动手指时,一个点跟随他们的手指。我需要点来改变颜色,因为它在屏幕区域移动。

我正在考虑在[{1}}后面设GridView。 当您的手指沿着GridView中的项目传递时,点(在drawingView中创建)会跟随您的手指并在通过项目时更改颜色。

到目前为止,我的手指在屏幕上方有一个点。我现在需要改变颜色,因为它在不同的部分上移动。当我尝试将一个测试GridView放在drawingView后面时,GridView会显示在前面。我在Java中尝试了drawingView,在XML中尝试了.bringToFront();但是没有用。

我希望它是什么:

GridView的图像(它在应用程序中是不可见的)

手指沿着网格移动时跟随点的图像:

(理想情况下,点击gif应该拖动)

这是我的 MainActivity.java 代码:

FrameLayout

我的 drawingView.java 文件:

public class MainActivity extends Activity {

drawingView dview;
GridView gridview;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    dview = new drawingView(this);

    setContentView(dview);

    setContentView(R.layout.activity_activity1);
    dview.bringToFront();

    final GridView gridview = (GridView) findViewById(R.id.gridview);
    gridview.setAdapter(new ImageAdapter(this));
    gridview.setVisibility(GridView.VISIBLE);

    gridview.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View v,
                int position, long id) { 

            ImageView tv = (ImageView) gridview.getChildAt(position);
            tv.setImageResource(R.drawable.touch); //
            tv.setVisibility(ImageView.INVISIBLE);

        }
    });
}

最后我的 ImageAdapter

public class drawingView extends View implements OnTouchListener {

static int x, y, r = 0, g = 0, b = 0;
final static int radius = 30;
Paint big;
List<Point> points = new ArrayList<Point>();

public drawingView(Context context) {

    // for the dot that follows your finger
    big = new Paint();
    big.setAntiAlias(true);
    big.setARGB(100, 255, 255, 255);
    setBackgroundResource(R.drawable.background);

    setFocusable(true);
    this.setOnTouchListener(this);

}

@Override
// creating dot that follows your finger
public void draw(Canvas canvas) {
    super.draw(canvas);
    canvas.drawCircle(x, y, radius, big);
    for (Point p : points) {
        canvas.drawCircle(p.x, p.y, 10, small);
    }
    invalidate();
}

@Override
public boolean onTouch(View view, MotionEvent event) {
    view.setVisibility(View.VISIBLE);

    big.setARGB(255, 113, 113, 113);

    x = (int) event.getX() - (radius / 2);
    y = (int) event.getY() - (radius / 2);
    randColor();

    int eventaction = event.getAction();
    switch (eventaction) {
    case MotionEvent.ACTION_UP:
        big.setARGB(0, 0, 0, 0);
        setBackgroundResource(R.drawable.background);
        invalidate();
        break;
    }
    return true;
}

public void randColor() {
    r = 255;
    g = 0;
    b = 0;
}

}

我从之前提出的另一个问题中知道,在与所有这些问题进行交互时,无法堆叠视图。但是我知道必须有办法实现我的需要,即使这不是我做的方式。如果有人知道如何帮助我的代码,或者甚至知道一种替代方法,那就太棒了。

修改

我的 activity_activity1.xml 布局:

public class ImageAdapter extends BaseAdapter {
private Context mContext;

public ImageAdapter(Context c) {
    mContext = c;
}

public int getCount() {
    return mThumbIds.length;
}

public Object getItem(int position) {
    return null;
}

public long getItemId(int position) {
    return 0;
}

public View getView(int position, View convertView, ViewGroup parent) {
    ImageView imageView;
    if (convertView == null) {
        imageView = new ImageView(mContext);
        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
    } else {
        imageView = (ImageView) convertView;
    }

    imageView.setImageResource(mThumbIds[position]);
    return imageView;

}

public Integer[] mThumbIds = {R.drawable.images...};
} 

2 个答案:

答案 0 :(得分:1)

试试这个

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal"
android:background="@drawable/background"
tools:context=".Activity1" >

<GridView
    android:id="@+id/gridview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:columnWidth="33dp"
    android:gravity="center"
    android:height="90dp"
    android:horizontalSpacing="0dp"
    android:numColumns="auto_fit"
    android:stretchMode="columnWidth"
    android:verticalSpacing="0dp"
    android:color="#00000000" >
</GridView>
<RelativeLayoutandroid:layout_width="fill_parent"
     android:layout_height="fill_parent"  android:id="@+id/drawingViewHolder">
</RelativeLayout>

答案 1 :(得分:0)

你正在做setContentView()两次;所以活动将采用setContentView(R.layout.activity_activity1);而不是这样做,将一个相对布局作为活动的setContenView,然后首先添加gridView,然后添加一个线性或相对布局。通过这种方式,两个视图将一个在另一个之上。然后实例化你的绘图视图并将它的对象idd到你的上层视图。