小编Mar*_*arc的帖子

如何计算具有一定角度的圆上的位置?

我想弄清楚我怎么能够计算圆上的坐标.为简单起见,我制作了一些图片

http://i.stack.imgur.com/y1F2y.png

这是我拥有的信息的开始.现在我需要计算新坐标,例如圆圈向右旋转90度.就像下一张图片一样:

http://i.stack.imgur.com/ckopK.png

我需要计算新红点的坐标.(我也需要不同程度,如20度).

要做到这一点,我的计划是做以下事情:

  • 计算两点之间的距离
  • 计算北(上)和给定点之间的度数
  • 用度数(从后退)+需要转动的度数(在图像中90度)计算新位置.

我的第一步是:

distance = Math.sqrt((point1.x-point2.x)*(point1.x-point2.x) + (point1.y-point2.y)*(point1.y-point2.y))
Run Code Online (Sandbox Code Playgroud)

计算新学位的部分是:

double theta = Math.atan2(targetPt.y - centerPt.y, targetPt.x - centerPt.x);
theta += Math.PI/2.0;
Run Code Online (Sandbox Code Playgroud)

计算新位置的最后一部分是:

double x = mMiddleView.getX() + distance * Math.cos(Math.toRadians(theta));
double y = mMiddleView.getY() + distance * Math.sin(Math.toRadians(theta));
Run Code Online (Sandbox Code Playgroud)

但是,当我使用例如0度进行这些计算时,它仍然返回另一个值而不是原始坐标.

任何帮助,将不胜感激!

编辑Philipp Jahoda:

我的价值观是:

distance +- 70, currentDegree = 0.
PointF point = new PointF((float)mMiddleView.getX(), (float)mMiddleView.getY());
PointF point2 = getPosition(point, (float) distance, currentDegree);
Run Code Online (Sandbox Code Playgroud)

我的结果是:

center: PointF(490.0, 728.0) radius: 78.0 angle: 0.0
new point: PointF(568.0, 728.0)
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,度数是0所以这个点不应该转.它应该保持490,728坐标但不保留它们.

java math geometry android

13
推荐指数
1
解决办法
8438
查看次数

AnimatedVisibility 和 BringIntoViewRequester 不能一起工作

我正在构建一个可扩展的可组合项,单击时它将展开。这可以通过使用 AnimatedVisibility 来实现,效果非常好。可见性动画的代码:

AnimatedVisibility(
    visible = isExpanded, 
) {
    // Content removed.
}
Run Code Online (Sandbox Code Playgroud)

我当前面临的问题是,它位于垂直可滚动列中,当单击展开它旁边时,它应该滚动到展开的内容。

BringIntoViewRequester据我所知,这可以通过使用下面的代码片段中的 as来完成:

var isExpanded by remember { mutableStateOf(false) }
val intoViewRequester = remember { BringIntoViewRequester() }

ClickableComposable(modifier = Modifier.clickable {
    isExpanded = !isExpanded
    if(isExpanded) {
        coroutineScope.launch {
            // delay(200)
            intoViewRequester.bringIntoView(rect = null)
        }
     }
})

AnimatedVisibility(
    modifier = Modifier.bringIntoViewRequester(intoViewRequester),
    visible = isExpanded, 
) {
    // Content removed.
}
Run Code Online (Sandbox Code Playgroud)

上面的代码可以处理延迟,但这对于用户来说并不是完美的交互。首先看到内容展开,然后看到页面滚动。理想的情况是它会同时发生,但内容尚未以任何方式进行测量。通过消除延迟,它不起作用,因为内容尚不可见。

Compose 中有什么可以同时进行扩展和滚动吗?

android-jetpack-compose

9
推荐指数
0
解决办法
1045
查看次数

将ImageView对齐屏幕右上角

我的布局中有一个imageView作为背景,不能缩放.但我需要将我的图像放在屏幕的右上角.我现在将我的图像放在屏幕的左上角.这是我对imageview的xml:

    <ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentRight="true"
android:src="@drawable/achtergrond"
android:scaleType="fitCenter" />
Run Code Online (Sandbox Code Playgroud)

我也尝试将它放在一个linearlayout中,它具有gravity ="top | right"但不会删除图片周围的空白区域,因为它具有match_parent大小.我还需要保持图片的比例,所以我不能做fill_parent.

我希望有人可以帮助我!

android imageview android-layout

7
推荐指数
3
解决办法
3万
查看次数

SQLite数据库与片段结合使用

我正在将我的应用程序从Activity更改为Fragments,它很棒,但是我有一个错误,它不会让我打开我的数据库.这是错误(来自logcat):

05-17 15:28:38.704  13025-13025/com.MJV.werktijden             E/AndroidRuntime: FATAL EXCEPTION: main
    java.lang.NullPointerException
    at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:224)
    at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164)
    at com.MJV.werktijden.DBAdapter.open(DBAdapter.java:71)
    at com.MJV.werktijden.OverviewFragment.onActivityCreated(OverviewFragment.java:38)
    at android.app.Fragment.performActivityCreated(Fragment.java:1703)
    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:903)
    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1057)
    at android.app.BackStackRecord.run(BackStackRecord.java:682)
    at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1435)
    at android.app.FragmentManagerImpl$1.run(FragmentManager.java:441)
    at android.os.Handler.handleCallback(Handler.java:725)
    at android.os.Handler.dispatchMessage(Handler.java:92)
    at android.os.Looper.loop(Looper.java:137)
    at android.app.ActivityThread.main(ActivityThread.java:5041)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
    at dalvik.system.NativeStart.main(Native Method)
Run Code Online (Sandbox Code Playgroud)

我试图自己解决,但我找不到问题.只是因为当我将它与Activity一起使用时,这个数据库确实有效.我用这种方法打开数据库:

    //---opens the database---
public DBAdapter open() throws SQLException
{
    db = DBHelper.getWritableDatabase();
    return this;
}
Run Code Online (Sandbox Code Playgroud)

从我的片段中调用该方法:

private final DBAdapter db = new DBAdapter(getActivity());

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-sqlite

5
推荐指数
1
解决办法
1万
查看次数

撰写nestedScrollConnection 不会被动画滚动触发

我使用 NestedScrollConnection 在 Compose 中创建了一个可折叠标头。一切都很完美,但必须添加一个内容:自动滚动到某个项目。我遇到的问题是,标题(使用 NestedScrollConnection 连接)在触发 animateScrollTo 时不会更新。

从 Android 开发人员文档中找到了类似的版本(这是来自实验性的 Material3 库,但也可能没有):

val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior()
Scaffold(
    modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection),
    topBar = {
        MediumTopAppBar(
            title = { Text("Medium TopAppBar") },
            navigationIcon = {
                Icon(imageVector = Icons.Filled.Menu, contentDescription = "Localized description")
            },
            scrollBehavior = scrollBehavior
        )
    },
    content = { innerPadding ->
        val listState = rememberLazyListState()

        val coroutines = rememberCoroutineScope()
        LaunchedEffect(key1 = Unit, block = {
            coroutines.launch {
                delay(5000)
                // Starts the scrollTo
                listState.animateScrollToItem(50, 0)
            }
        })

        LazyColumn( …
Run Code Online (Sandbox Code Playgroud)

android kotlin android-jetpack-compose android-jetpack-compose-material3 android-jetpack-compose-lazy-column

5
推荐指数
0
解决办法
1519
查看次数

位图太大,无法在缩小后上传到纹理中

我做了一个有很大背景的应用程序.它在Nexus 7上完美运行,但在我的Galaxy Nexus上,背景消失了,并在logcat中给出了错误:位图太大而无法上传到纹理(...).

我已经阅读了这篇文章并使用了那里的代码.我用来设置背景的代码是这样的:

Display display = getWindowManager().getDefaultDisplay();
    width = display.getWidth();
    height = display.getHeight();


    //-------------------------------------------------------------------------------------------------------------

    ImageView achtergrond = (ImageView)findViewById(R.id.achtergrond);
    achtergrond.setImageBitmap(decodeSampledBitmapFromResource(getResources(), R.drawable.achtergrond, width, height));
} (...)

public static Bitmap decodeSampledBitmapFromResource(Resources res, int resId,
        int reqWidth, int reqHeight) {

    // First decode with inJustDecodeBounds=true to check dimensions
    final BitmapFactory.Options options = new BitmapFactory.Options();
    options.inJustDecodeBounds = true;
    BitmapFactory.decodeResource(res, resId, options);

    // Calculate inSampleSize
    options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);

    // Decode bitmap with inSampleSize set
    options.inJustDecodeBounds = false;
    return BitmapFactory.decodeResource(res, resId, options); …
Run Code Online (Sandbox Code Playgroud)

android bitmap android-imageview

2
推荐指数
1
解决办法
2556
查看次数

未调用内容提供者query()(Android TV)

根据要创建的文档,我试图将我的应用程序包含在Android TV全局搜索中:

  • 内容提供商
  • Searchable.xml

当然,将它们包括在清单中。这就是我所做的,我的contentprovider非常简单。它不返回任何数据,但是当它获得query()调用时,它将在日志中打印一些行,但尚未完成。

public class VideoContentProvider extends ContentProvider {
private static String TAG = "VideoContentProvider";
public static String AUTHORITY = "test.tvsearch";

// UriMatcher stuff
private static final int SEARCH_SUGGEST = 0;
private static final int REFRESH_SHORTCUT = 1;
private static final UriMatcher URI_MATCHER = buildUriMatcher();

//private VideoDatabase mVideoDatabase;

/**
 * Builds up a UriMatcher for search suggestion and shortcut refresh queries.
 */
private static UriMatcher buildUriMatcher() {
    UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH);
    // to get suggestions... …
Run Code Online (Sandbox Code Playgroud)

android android-contentprovider android-search android-tv

2
推荐指数
1
解决办法
1067
查看次数

从静态方法开始活动

我有一个启动Activity的问题.我试图用静态方法开始一个新的活动.

这是我的代码:

    static Dialog dialog=null;
public static void NextLevel(Context c,String title,String message){


     AlertDialog.Builder alertbox = new AlertDialog.Builder(c);
     alertbox.setTitle(title);
     alertbox.setMessage(message);
     alertbox.setPositiveButton("Volgende level", new DialogInterface.OnClickListener() {
         public void onClick(DialogInterface arg0, int arg1) {

         }
     });
     alertbox.setNegativeButton("Terug naar menu", new DialogInterface.OnClickListener() {
         public void onClick(DialogInterface arg0, int arg1) {
             startActivity(new Intent(Main.this, MainMenu.class));
         } 
     });
     alertbox.show();
}
Run Code Online (Sandbox Code Playgroud)

startActivity不起作用,因为它无法从静态方法启动Activity.我似乎无法找到解决这个问题的方法,因为我也无法创建一个可以启动它的上下文.

static android android-intent android-activity

0
推荐指数
1
解决办法
3024
查看次数