我想在我的 Android 应用程序中创建类似于 in
app.
我尝试过创建一个sphere http://www.programering.com/a/MDM3cjNwATU.html到目前为止,但任何人都可以指导我如何继续在 android 中开发这样的动画。
我们是否必须仅使用 opengl 或者我们可以通过其他替代选项来实现它。
此外,当单击文本时,它会在不同的屏幕中打开相关新闻。
EDIT
我终于找到了一些解决方案,可以在下面找到package https://github.com/amrut8winjit/MyApplication/tree/master/app/src/main/java/com/winjit/myapp/tagcloud.
但是,动画不够流畅。
让我知道是否有人可以帮助我平滑动画?
你不需要OpenGL。您可以使用简单的视图和画布来做到这一点。我为你写了一些代码。您只需将其复制到您的项目中,添加到 xml 并运行:
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
public class TagCloudView extends View {
String[] tags = new String[]{"Lemon","Orange","Strawberry","Plum","Pear","Pineapple","Blackberry","Watermelon"};
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
private float scroll = 0;
private float prevY;
public TagCloudView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public void draw(Canvas canvas) {
super.draw(canvas);
float r = getHeight() / 3;
paint.setColor(Color.BLACK);
paint.setTextAlign(Paint.Align.CENTER);
for (int i = 0; i < tags.length; i++) {
float t = i + scroll / getHeight();
float y = (float) (r * Math.cos(Math.PI * 2 * t / tags.length)); // parametric circle equation
float z = (float) (r * Math.sin(Math.PI * 2 * t / tags.length));
paint.setTextSize((r + z) / r/2 * 40 + 20); // magic values, change to something better
paint.setAlpha((int) ((r + z) / r/2 * 127 + 128));
canvas.drawText(tags[i], getWidth() / 2, getHeight() / 2 + y, paint);
}
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() != MotionEvent.ACTION_DOWN)
scroll -= event.getY() - prevY; // only one plane
prevY = event.getY();
invalidate();
return true;
}
}
为了实现您所描述的结果,您必须使用 Scroller 添加平滑滚动,将圆方程更改为球体方程,调整参数并添加一些 getter/setter。使用参数方程,您还可以找到用户触摸的文本。这个视图看起来像这样:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)