小编RSc*_*son的帖子

使用SharedElement活动转换与自定义视图

我正在开发一个概念验证,我在TableLayout中有一些自定义视图.单击其中一个视图时,我想要为扩展为新活动的视图设置动画.我想要达到的效果类似于这里看到的效果.

从我的研究来看,似乎这样做的方法是使用共享元素Transitions.但是,我无法让它正常工作,我想知道是否因为我使用自己的自定义视图.

具体来说,衰落正在发生,但缩放和翻译动作不是.检查下面的GIF,看看我在哪里.在示例中,我单击左上角的圆圈,我想将其转换为新活动中的整个圆圈.按下后退按钮时也会出现此问题.

在此输入图像描述

我认为这是不正确的,因为必须绘制视图,但有没有办法进一步自定义我的视图以使其工作?我发现的这种转换的所有示例都包含ImageViews,Buttons和TextViews.

以下是相关来源.我的自定义视图很大,不包含任何特殊代码,只是覆盖onDraw()和onMeasure().

MainActivity.java

package com.rscottcarson.circleschedulertest;

import android.app.Activity;
import android.app.ActivityOptions;
import android.content.Intent;
import android.support.v4.app.ActivityOptionsCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.widget.Toast;
public class MainActivity extends Activity {

    private View view1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        view1 = findViewById(R.id.circle1);

        view1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                Intent intent = new Intent(MainActivity.this, DetailActivity.class);
                // create the transition animation - the images in the layouts
                // of both activities …
Run Code Online (Sandbox Code Playgroud)

android android-custom-view android-transitions shared-element-transition

12
推荐指数
1
解决办法
967
查看次数

Persistent BottomSheet peekHeight和STATE_COLLAPSED在Activity start上没有正确绘制

我有一个CoordinatorLayout,它有一个自定义视图和一个持久的底部工作表.我已禁用底部工作表的隐藏,并希望在折叠状态下显示LinearLayout中的顶部视图.为了考虑不同的屏幕尺寸,我在所有布局完成后,动态地将peekHeight设置在我的活动的onCreate中.

问题是当活动首次开始时,BottomSheet在一个高度偷看,然后在它再次展开和折叠之后,peekHeight似乎已经改变了.有趣的是,它在视觉上看起来像peekHeight添加的是布局活动填充(16dp).但是,BottomSheetBehavior为两者报告相同的peekHeight.

我为此创建了一个hacky解决方法,但我想知道是否有任何我做错了.下面是一个gif显示我没有我的解决方法和一个当我使用我的解决方法时.我还包括相关的代码和布局文件.再次,它似乎与我的填充(16dp)直接相关,但我不明白如何解决它.

不使用变通方法:

在此输入图像描述

使用变通方法:

在此输入图像描述

活动:

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.edit_schedule_details_activity);

    final CoordinatorLayout activityLayout =
            (CoordinatorLayout) findViewById(R.id.edit_schedule_details_layout);

    ButterKnife.bind(this);

    // ... removed unrelated logic

    final View bottomSheet = findViewById(R.id.edit_details_sheet);

    final LinearLayout peekContainer = (LinearLayout) findViewById(R.id.info_title_container);
    activityLayout
            .getViewTreeObserver()
            .addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            // Set the measured peek height and add in 16 dps to account for inconsistency
            // Adding the 16 dps is part of the workaround
            bottomSheetBehavior.setPeekHeight(peekContainer.getHeight());
                    //+ (int) (16 * getResources().getDisplayMetrics().density)); /* …
Run Code Online (Sandbox Code Playgroud)

android android-layout android-coordinatorlayout bottom-sheet

7
推荐指数
0
解决办法
599
查看次数

强制OkHttp3客户端保持TLS连接打开

我正在开发一个应用程序,我必须通过HTTPS与具有自签名证书的嵌入式IoT产品进行通信.我成功设置了OkHttp以使用自签名证书,并通过RxCallAdapters通过Retrofit2进行网络调用.

嵌入式产品一次只能处理一个连接,所以我将我的底层OkHttp实例配置为只允许一个连接(据我所知,也许有更好的方法).

如果我只是发出GET请求,则握手成功完成,并且连接对整个请求序列保持打开状态.嵌入式产品在5秒钟不活动后关闭连接,因此我需要每隔一段时间重新进行一次握手.

在执行PUT和POST请求时会出现问题.当请求流从一种请求类型更改为另一种请求类型时,OkHttp似乎不会保持现有连接打开,或者实际上只要请求是PUT或POST.例如:

握手 - 得 - - - 握手 - 握 - 握手 - 得......等等

如何强制OkHttp在不同类型的请求之间保持连接打开?我知道它应该没关系,但似乎与响应代码有关.嵌入式设备上的REST API为GET提供200,为POST提供201,为PUT提供204.

这是我用来配置OkHttp和我的改造实例的相关代码:

@Provides
@Singleton
fun provideHttpLoggingInterceptor(): HttpLoggingInterceptor {
    val httpLoggingInterceptor = HttpLoggingInterceptor { message ->       Timber.tag("OkHttp").d(message) }

    setLogLevel(httpLoggingInterceptor)

    return httpLoggingInterceptor
}

private fun setLogLevel(httpLoggingInterceptor: HttpLoggingInterceptor) {
    if (BuildConfig.DEBUG) {
        httpLoggingInterceptor.level = HttpLoggingInterceptor.Level.BODY
    } else {
        httpLoggingInterceptor.level = HttpLoggingInterceptor.Level.NONE
    }
}

@Provides
@Singleton
fun provideContentTypeHeaderInterceptor(): Interceptor {
    return Interceptor { chain ->
        val originalRequest = chain.request()

        val requestBuilder = originalRequest.newBuilder()
        requestBuilder.header("Content-Type", …
Run Code Online (Sandbox Code Playgroud)

ssl android tls1.2 retrofit2 okhttp3

7
推荐指数
0
解决办法
310
查看次数

SharedPreferences和PreferenceFragment

我已经在ANdroid开发者网站上完成了PreferenceFragments和SharedPreferences的示例,但是我现在遇到了一个问题.我希望能够从不同的活动中访问"设置"屏幕中的首选项,但我不知道我的首选项片段生成的首选项文件的名称是什么.有没有人知道为PreferenceFragment指定首选项文件名?

android sharedpreferences

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