我正在制作使用视图类的安卓游戏。我不使用layout.all我的图像是用canvas绘制的。现在我的问题是我不能给位图
你知道的可触摸事件。我正在尝试动态地将imageview添加到我的视图类
使用可触摸事件。为什么我尝试动态添加imageview?因为我没有使用
layout.but我不能。有什么机构可以帮忙吗?
here is my code:
package com.example.poolmaster;
import java.util.ArrayList;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.Gravity;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.ImageView;
import android.widget.LinearLayout;
public class MainActivity extends Activity {
private int cuePosx,cuePosy;
int cueHeight,cueWeight;
double rotatingAngle;
int height;
int wwidth;
int cueHeight2,cueWeight2;
Bitmap table,stick,raise;
ImageView button = new ImageView(this);
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
rotatingAngle=0;
DisplayMetrics displaymetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
height = displaymetrics.heightPixels;
wwidth = displaymetrics.widthPixels;
cueHeight2=height/2;
cueWeight2=wwidth/2;
System.out.println("**************************************");
System.out.println("height " +height);
System.out.println("weight" +wwidth);
System.out.println("**************************************");
// Set generic layout parameters
// Modify this
GamePlay custom = new GamePlay(this);
setContentView(custom);
// setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
if(ev.getAction() == MotionEvent.ACTION_MOVE){
//cuePosy+=10;
//System.out.println("xCORDİNATES!!!! " +ev.getX());
//System.out.println("yCORDİNATES!!!! " +ev.getY());
rotatingAngle=getAngle(ev.getX(), ev.getY());
System.out.println("Angle " +rotatingAngle);
}
if(ev.getAction()==MotionEvent.ACTION_DOWN){
System.out.println("****************** ACTİON DOWN ****************");
//cueHeight2+=10;
//cueWeight2+=20;
//cuePosy=320;
}
if(ev.getAction()==MotionEvent.ACTION_UP){
System.out.println("****************** ACTİON DOWN ****************");
//cueHeight2-=10;
//cueWeight2-=20;
//cuePosy=320;
}
return true;
}
private double getAngle(double xTouch, double yTouch) {
double theta;
theta= Math.toDegrees( Math.atan2( height/2-yTouch , xTouch-wwidth/2) );
return theta;
}
public class GamePlay extends View{
public GamePlay(Context context) {
super(context);
// TODO Auto-generated constructor stub
table=BitmapFactory.decodeResource(getResources(), R.drawable.bg);
table= Bitmap.createScaledBitmap(table, wwidth, height, true);
stick=BitmapFactory.decodeResource(getResources(), R.drawable.stick);
raise=BitmapFactory.decodeResource(getResources(), R.drawable.raise);
cueHeight=stick.getHeight();
System.out.println("ıstaka " +cueHeight);
cueWeight=stick.getWidth();
cuePosx=wwidth/2;
cuePosy=height-cueHeight-180;
}
@SuppressLint({ "DrawAllocation", "DrawAllocation" })
@Override
public void onDraw(Canvas canvas) {
super.onDraw(canvas);
Matrix matrix = new Matrix();
matrix.setTranslate(cueWeight2, cueHeight2);
matrix.postRotate((float)rotatingAngle,cueWeight2, cueHeight2); // anti-clockwise by 90 degrees
// create a new bitmap from the original using the matrix to transform the result
Bitmap rotatedBitmap = Bitmap.createBitmap(stick , 0, 0, stick .getWidth(), stick .getHeight(), matrix,false);
canvas.save(); //Save the position of the canvas.
canvas.restore();
//Rotate the canvas.
canvas.drawBitmap(table, 0, 0, null); //Draw the ball on the rotated canvas.
canvas.drawBitmap(stick, matrix,null);
canvas.drawBitmap(raise, 0, 0,null);
invalidate();
}
}
}
答案 0 :(得分:2)
LinearLayout lL = findViewById(R.id.xmlfile_layout_id);
ImageView imgView = new ImageView(context);
imgView.setVisibility(View.VISIBLE);
lL.addView(imgView);
最初,您无法使用画布放置任何imageview,编辑文本或按钮。相反,你必须绘制它。因此,创建一个自定义布局并使用画布绘制该布局
试试这个,它可能对你有所帮助。在onDraw(..)
LinearLayout lL = new LinearLayout(context);
ImageView imgView = new ImageView(context);
imgView.setVisibility(View.VISIBLE);
lL.addView(imgView);
lL.measure(canvas.getWidth(), canvas.getHeight());
lL.layout(0, 0, canvas.getWidth(), canvas.getHeight());
// placing the edit text at specific co-ordinates:
//canvas.translate(0, 0);
layout.draw(canvas);
再看看另一个例子:Click here
它提供了另一种添加视图的方式
答案 1 :(得分:0)
使用以下代码。
动态创建ImageView
ImageView mImgView1 = new ImageView(this);
要添加到您的视图中,请在setContentView(custom);
之前编写以下代码(如果GamePlay是您的View类)
custom.add(mImgView1);