私はAndroidのタッチに対応する画像をドラッグしたいいくつかの例で取り組んでいます。誰かが私がそれをどうやってできるのか考えているのですか?アンドロイドで画像をタッチアンドドラッグする
答えて
public class TouchBall extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
int w=getWindowManager().getDefaultDisplay().getWidth()-25;
int h=getWindowManager().getDefaultDisplay().getHeight()-25;
BallView ballView=new BallView(this,w,h);
setContentView(ballView);
}
}
public class BallView extends SurfaceView implements SurfaceHolder.Callback {
private Bitmap bitmap ;
private MyThread thread;
private int x=20,y=20;int width,height;
public BallView(Context context,int w,int h) {
super(context);
width=w;
height=h;
thread=new MyThread(getHolder(),this);
getHolder().addCallback(this);
setFocusable(true);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
bitmap =BitmapFactory.decodeResource(getResources(), R.drawable.ball_green);
canvas.drawColor(Color.BLUE);//To make background
canvas.drawBitmap(bitmap,x-(bitmap.getWidth()/2),y-(bitmap.getHeight()/2),null);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
x=(int)event.getX();
y=(int)event.getY();
if(x<25)
x=25;
if(x> width)
x=width;
if(y <25)
y=25;
if(y > 405)
y=405;
return true;
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {
// TODO Auto-generated method stub
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
thread.startrun(true);
thread.start();
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
thread.startrun(false);
thread.stop();
}
}
スレッド:TouchBallの答えにわずかな変更として
public class MyThread extends Thread {
private SurfaceHolder msurfaceHolder;
private BallView mballView;
private boolean mrun =false;
public MyThread(SurfaceHolder holder, BallView ballView) {
msurfaceHolder = holder;
mballView=ballView;
}
public void startrun(boolean run) {
mrun=run;
}
@Override
public void run() {
super.run();
Canvas canvas;
while (mrun) {
canvas=null;
try {
canvas = msurfaceHolder.lockCanvas(null);
synchronized (msurfaceHolder) {
mballView.onDraw(canvas);
}
} finally {
if (canvas != null) {
msurfaceHolder.unlockCanvasAndPost(canvas);
}
}
}
}
}
新しい回答を投稿するのではなく、最初の回答を編集する必要があります... – WarrenFaith
2つの異なる答え、@WarrenFaithのように見えます。 1つはディスプレイを更新し続けるスレッドがあり、1つはユーザーの操作を待っています。各回答が完了している限り、複数の投稿に間違いはありません。 –
BallViewをsdcardにイメージとして保存する方法を知っていましたか? – chemalarrea
- あなたは本当にゲームループを持っていない場合 - つまり、画面への変更のみが原因に直接ありますユーザーの入力 - それはスレッドを残してより理にかなっているかもしれません。それ以外の場合は、何も変更されていなくても常にループして再描画します。したがって:
public class TouchBall extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
int w=getWindowManager().getDefaultDisplay().getWidth()-25;
int h=getWindowManager().getDefaultDisplay().getHeight()-25;
BallView ballView=new BallView(this,w,h);
setContentView(ballView);
}
}
public class BallView extends SurfaceView implements SurfaceHolder.Callback {
private Bitmap bitmap ;
private int x=20,y=20;int width,height;
public BallView(Context context,int w,int h) {
super(context);
width=w;
height=h;
getHolder().addCallback(this);
setFocusable(true);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
bitmap =BitmapFactory.decodeResource(getResources(), R.drawable.ball_green);
canvas.drawColor(Color.BLUE);//To make background
canvas.drawBitmap(bitmap,x-(bitmap.getWidth()/2),y-(bitmap.getHeight()/2),null);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
x=(int)event.getX();
y=(int)event.getY();
if(x<25)
x=25;
if(x> width)
x=width;
if(y <25)
y=25;
if(y > 405)
y=405;
updateBall();
return true;
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {
// TODO Auto-generated method stub
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
}
private void updateBall() {
Canvas canvas = null;
try {
canvas = getHolder().lockCanvas(null);
synchronized (getHolder()) {
this.onDraw(canvas);
}
}
finally {
if (canvas != null) {
getHolder().unlockCanvasAndPost(canvas);
}
}
}
}
確かに、私はAndroid開発の初心者なので、ここで何か不足している可能性があります。
- 1. アンドロイドで画像スライドショー
- 2. 画像をアンドロイドで圧縮
- 3. アンドロイドで画像をズーム&ドラッグする
- 4. アンドロイドで画像を拡大する
- 5. アンドロイドで画像を保存する
- 6. アンドロイドで画像をドロップする
- 7. アップロードマルチパート画像アンドロイド
- 8. GIF画像アンドロイド
- 9. アンドロイドでぼかし画像
- 10. アンドロイド:画面にフィットする画像ビューのストレッチ画像
- 11. 画像ビューアにアンドロイド表示画像
- 12. 保存画像アンドロイド
- 13. アンドロイドで画像をキャプチャしますか?
- 14. 画像処理:アンドロイドのAscii画像への画像
- 15. アンドロイドで画像をBluetoothで共有
- 16. アンドロイドで複数の画面をサポートする場合の画像
- 17. アンドロイドで画面上の画像を交換する
- 18. アンドロイドで小さな画像をキャンバスに描画する方法
- 19. アンドロイドで画像を回転しながら画像のサイズを変更する
- 20. アンドロイドでJPEG/PNG画像をTIFF画像形式に変換するOS
- 21. アンドロイドで、カメラから取得した画像の画像IDを取得する
- 22. 画像をアンドロイドでクリップボードにコピー
- 23. アンドロイドで画像拡大のサポートをリストアップ
- 24. アンドロイドの画像コレクションを見る
- 25. 変更背景画像 - アンドロイド
- 26. 画像設定アンドロイドのギャラリービュー
- 27. アンドロイド上の画像認識
- 28. アンドロイドの画像にオーバーレイ画像がありますか?可能?
- 29. アンドロイドのユニバーサル画像ローダーはsqlite dbの画像で動作できますか?
- 30. アンドロイド(SlideShow)で画像を使用したアニメーションシーケンスを作成する
このチュートリアルを試してみてください.... http://www.anddev.org/basic_drag_and_drop-t3095.html – Noman
'SurfaceView'を使用している場合、私のチュートリアルの部分に従うことができます。 http://www.droidnova.com/playing-with-graphics-in-android-part-vi209.htmlここでは、タッチを動かしながらSurfaceViewの位置を追加したり変更したりする方法について紹介します。それ以降の部分は、ショートゲームですべての学習物を実装するショートゲームです。私はそれがあなたを助け、これを行う方法を示すべきだと思います... – WarrenFaith