我一直在学习
Android大约两个星期(专家在as2 / 3).
我创建了一个简单的LinearLayout1,它包含一个包含一个乙烯基记录的png(一个圆形光盘基本上)
当用户拖动手指时,我已经设置了这个ImageView来旋转,就像抓拍一样.
我的代码似乎正在工作(不知道它的最佳方式,但它的作品).问题是当ImageView旋转时它会推动其他视图.我确定这是因为我的圆形图像真的是一个透明角落的正方形.正是这些角落正在推动其他视图,如果我有ImageView左对齐,则导致记录从屏幕的左侧推开.
有几个尝试来解决这个在线问题,但是没有一个似乎是我所需要的,有些包裹在这样的强大的例子中,我无法从起始阶段辨别出什么.
如果有人能说出一些可以做的事情,那么解决这件事情会很棒.我意识到一个简单的答案可能不存在,但请记住,我是一个Java noob,并保持尽可能简单!非常感谢您的任何帮助!
如果有人可以告诉我为什么我需要从旋转中减去50,使记录在用户触摸的确切位置移动,这也是有帮助的!在updateRotation()方法中看到这一点.
这是我的xml标记:
<?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>
这里是我的java代码:
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,bitmap.getWidth(),bitmap.getHeight(),matrix,true); turntable.setImageBitmap(redrawnBitmap); } }
编辑
这是一个令人烦恼的问题.必须有一种方法来旋转比屏幕大或大的图像,而不会缩放图像,使整个图像保持在屏幕上.为什么旋转图像的一部分不能离开屏幕?很沮丧我试图将ImageView包装到FrameView中,这部分有助于.现在我可以添加不会受到影响的其他视图,但是我仍然无法使光盘足够大,因为它不允许在旋转时传递屏幕边框.我不明白为什么我还没有签出扩展ImageView.任何其他想法仍将不胜感激!
解决方法
其实这是因为你尝试以线性布局旋转视图.这将导致其专用空间扩大或缩小.
想法1:尝试使用框架布局,您的视图在里面旋转想法2:尝试自定义视图子类,并在onDraw中绘制您的转盘.在互联网上寻找一个罗盘绘制示例开始.