Tôi đã học Android được khoảng hai tuần nay (chuyên gia trong as2/3).Android - Xoay một ImageView bằng ngón tay di chuyển các chế độ xem khác xung quanh
tôi đã tạo ra một LinearLayout1, which contains an
ImageView` đơn giản, có chứa một png của một bản ghi vinyl (chỉ là một đĩa tròn cơ bản)
Tôi đã thiết lập ImageView
này để được luân chuyển khi người dùng kéo một ngón tay vào nó, giống như gãi hồ sơ.
Mã của tôi có vẻ đang hoạt động (không chắc chắn nếu đó là cách tốt nhất nhưng nó hoạt động). Vấn đề là khi ImageView
được xoay, nó sẽ đẩy các chế độ xem khác xung quanh. Tôi đã xác định điều này là bởi vì hình ảnh tròn của tôi thực sự là một hình vuông với các góc trong suốt. Đó là các góc đang đẩy các góc nhìn khác xung quanh và làm cho bản ghi đẩy ra khỏi phía bên trái của màn hình nếu tôi có mặt bằng ImageView
.
Có một vài nỗ lực để giải quyết trực tuyến này, nhưng không có cách nào trong số chúng có vẻ là những gì tôi cần và một số được bao bọc trong các ví dụ thật mạnh mẽ.
Nếu ai đó có thể làm sáng tỏ những gì tôi có thể làm để giải quyết vấn đề này thật tuyệt vời. Tôi nhận ra một câu trả lời đơn giản có thể không tồn tại, nhưng hãy nhớ tôi là một noob Java và giữ nó đơn giản như bạn có thể! Cảm ơn rất nhiều vì đã giúp đỡ!
cũng nếu có ai có thể cho tôi biết lý do tôi cần trừ 50 khỏi vòng quay để làm cho việc ghi lại di chuyển dưới điểm chính xác mà người dùng chạm vào, điều đó cũng hữu ích! xem điều này trong phương thức updateRotation().
Dưới đây là đánh dấu xml của tôi:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/baseView"
android:background="#FFFFFFFF"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ImageView
android:id="@+id/turntable"
android:src="@drawable/turntable"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"/>
</LinearLayout>
và đây là mã java của tôi:
package com.codingfiend.android.turntable;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.Window;
import android.widget.ImageView;
import android.widget.TextView;
public class Turntable extends Activity
{
View baseView;
ImageView turntable;
TextView bottomText;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main);
baseView = (View)findViewById(R.id.baseView);
turntable = (ImageView)findViewById(R.id.turntable);
turntable.setOnTouchListener(onTableTouched);
}
public android.view.View.OnTouchListener onTableTouched = new android.view.View.OnTouchListener()
{
public boolean onTouch(View v, MotionEvent evt)
{
double r = Math.atan2(evt.getX() - turntable.getWidth()/2, turntable.getHeight()/2 - evt.getY());
int rotation = (int) Math.toDegrees(r);
if (evt.getAction() == MotionEvent.ACTION_DOWN)
{
//
}
if (evt.getAction() == MotionEvent.ACTION_MOVE)
{
updateRotation(rotation);
}
if (evt.getAction() == MotionEvent.ACTION_UP)
{
//
}
return true;
}
};
private void updateRotation(double rot)
{
float newRot = new Float(rot);
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.turntable);
Matrix matrix = new Matrix();
matrix.postRotate(newRot - 50);
Bitmap redrawnBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
turntable.setImageBitmap(redrawnBitmap);
}
}
EDIT
này được chuyển ra được một vấn đề khó chịu. Đã có một cách để xoay một hình ảnh lớn hoặc lớn hơn màn hình mà không bị thu nhỏ để toàn bộ hình ảnh vẫn còn trên màn hình. Tại sao một phần của hình ảnh luân phiên không thể thoát khỏi màn hình? Rất bực bội. Tôi đã cố gắng gói ImageView vào một khung ảnh FrameView, một phần đã giúp ích. Bây giờ tôi có thể thêm các chế độ xem khác sẽ không bị ảnh hưởng, nhưng tôi vẫn không thể có đủ đĩa của mình vì nó không được phép vượt qua viền màn hình khi nó quay. Tôi không hiểu tại sao. Tôi chưa xem xét mở rộng ImageView. Bất kỳ suy nghĩ nào khác vẫn sẽ được đánh giá cao!
+1 Câu hỏi được đặt ra. Chào mừng bạn đến với SO. – wheaties