我正在构建一个应用程序,当一个人在屏幕上拖动手指时,一个点跟随他们的手指。我需要点来改变颜色,因为它在屏幕区域移动。
我正在考虑在[{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...};
}
答案 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到你的上层视图。