我想弄清楚我怎么能够计算圆上的坐标.为简单起见,我制作了一些图片
这是我拥有的信息的开始.现在我需要计算新坐标,例如圆圈向右旋转90度.就像下一张图片一样:
我需要计算新红点的坐标.(我也需要不同程度,如20度).
要做到这一点,我的计划是做以下事情:
我的第一步是:
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坐标但不保留它们.
我正在构建一个可扩展的可组合项,单击时它将展开。这可以通过使用 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 中有什么可以同时进行扩展和滚动吗?
我的布局中有一个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.
我希望有人可以帮助我!
我正在将我的应用程序从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) 我使用 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
我做了一个有很大背景的应用程序.它在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 TV全局搜索中:
当然,将它们包括在清单中。这就是我所做的,我的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) 我有一个启动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.我似乎无法找到解决这个问题的方法,因为我也无法创建一个可以启动它的上下文.
android ×7
android-jetpack-compose-lazy-column ×1
android-jetpack-compose-material3 ×1
android-tv ×1
bitmap ×1
geometry ×1
imageview ×1
java ×1
kotlin ×1
math ×1
static ×1