1

我在这里找到了一个为 Android 项目添加“调节旋钮”的示例项目:

http://go-lambda.blogspot.com/2012/02/rotary-knob-widget-on-android.html

而且,总的来说,它运作良好。我的项目在一些方面与示例有所不同,但最重要的是我以编程方式(无 XML)将旋钮小部件和完成按钮添加到显示中,如下所示:

activity.getWindowManager().getDefaultDisplay().getMetrics (app.metrics);
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams
    (300, RelativeLayout.LayoutParams.WRAP_CONTENT);

lp.topMargin            = 100;
lp.bottomMargin         = 598;
lp.leftMargin           = 50;
lp.rightMargin          = 348;

lp.height               = 300;
lp.width                = 300;

activity.addView (knob, lp);

lp = new RelativeLayout.LayoutParams (RelativeLayout.LayoutParams.WRAP_CONTENT,
    RelativeLayout.LayoutParams.WRAP_CONTENT);

int top = (int)(0.75 * app.metrics.heightPixels) - 40;
lp.topMargin            = top - 100;
lp.leftMargin           = 150;
lp.rightMargin          = 100;

act.addView (b1, lp);
knob.requestFocus();

我喜欢图形出现的方式和位置(大部分时间),但问题是当旋钮旋转时,它似乎并没有围绕其中心旋转,因此左右摆动(并向上摆动) -and-down) 当用户旋转它时。它不会影响重要的东西,但它看起来很有趣,我想修复它。

4

2 回答 2

1

最终,问题很简单(同时也很烦人)。示例项目提供的 png 文件是一个正方形,其中的旋钮图片不在正方形的中心。我的 android 应用程序显然不是在旋转旋钮,而是在旋转方形 png 文件。真正令人讨厌的部分是(1)找到替换文件或(2)修复原始文件是多么困难。幸运的是,我找到了适合第 2 项的工具的人。我的建议:如果您需要在项目中做类似的事情,我推荐的网站非常有帮助,但您需要替换或修复实际图片。

于 2013-12-11T15:57:59.197 回答
0

发布的示例中的旋转问题很可能是因为控件以离散步骤旋转,而不是图像的平滑增量/旋转。如果要修改给定较小角度的旋转代码,您可以做什么。

要从头开始执行此操作,您需要一种将触摸坐标转换为极坐标(以获得旋转角度)的方法。这可以像这样轻松完成:

private float cartesianToPolar(float x, float y) {
  return (float) -Math.toDegrees(Math.atan2(x - 0.5f, y - 0.5f));
}

要旋转图像视图或用于显示旋钮的元素,可以使用如下矩阵:

Matrix matrix=new Matrix();
ivRotor.setScaleType(ScaleType.MATRIX);   
matrix.postRotate((float) deg, m_nWidth/2, m_nHeight/2);//getWidth()/2, getHeight()/2);
ivRotor.setImageMatrix(matrix);

其中 deg 是角度,ivRobor 是旋钮图像视图。

我还整理了一个完整的工作示例,以防您需要进一步的帮助。你可以在这里看到它:http ://www.pocketmagic.net/2013/11/custom-rotary-knob-control-for-android/

于 2013-11-05T12:27:52.143 回答