lkf181 2023-04-27 19:03 采纳率: 86.5%
浏览 37
已结题

Android如何 只让TextView横屏其他不动?

我是想弄个用MP4 作为聊天背景的,然后文字可旋转90度(即横屏、竖屏),但是我不想背景的MP4或者图片也跟着旋转90度啊!
下面将所有的试验代码全部贴出:

package CustomControl;


import android.content.Context;
import android.media.MediaPlayer;
import android.util.AttributeSet;
import android.view.KeyEvent;
import android.widget.VideoView;

/**
 * 自定义控件
 */
public class LGvideoview extends VideoView {
    public LGvideoview(Context context) {
        this(context,null);
    }
    public LGvideoview(Context context, AttributeSet attrs) {
        this(context, attrs,0);
    }
    public LGvideoview(Context context, AttributeSet attrs, int defStyleAttr) {
        this(context, attrs, defStyleAttr,0);
    }
    public LGvideoview(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        //我们重新计算高度
        int width = getDefaultSize(0, widthMeasureSpec);
        int height = getDefaultSize(0, heightMeasureSpec);
        setMeasuredDimension(width, height);
    }
    @Override
    public void setOnPreparedListener(MediaPlayer.OnPreparedListener l) {
        super.setOnPreparedListener(l);
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        return super.onKeyDown(keyCode, event);
    }
}

Activity页面:


<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <CustomControl.LGvideoview
        android:id="@+id/lg_Videoview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

    <TextView
        android:id="@+id/tv_msg"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="100sp"
        android:textColor="@color/white"
        android:text="Fuck!"/>


</FrameLayout>


页面后台的java代码:


package com.lkfcode.myhelper;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.widget.MediaController;
import android.widget.TextView;
import android.widget.VideoView;

/*
https://blog.csdn.net/CChuXueZhe2034/article/details/106979545
 */
public class TestMp4BkActivity extends AppCompatActivity {
    private VideoView g_LGvideoview;
    private TextView g_tvmsg;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test_mp4_bk);

        horizontalMethod();
        this.g_tvmsg = findViewById(R.id.tv_msg);
        this.g_LGvideoview = (VideoView)findViewById(R.id.lg_Videoview);
        initVideView();
    }
    /**
     * 设置竖屏
     */
    private void verticalMethod(){
        if(this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        }
    }

    /**
     * 设置横屏
     */
    private void horizontalMethod(){
        if(this.getResources().getConfiguration().orientation ==Configuration.ORIENTATION_PORTRAIT){
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        }
    }

    /**
     * 播放视频
     */
    private void initVideView(){
        //根据文件路径播放
        //if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
        //    g_LGvideoview.setVideoPath(Environment.getExternalStorageDirectory() + "/lesson.mp4");
        //}

        //播放路径
        g_LGvideoview.setVideoURI(Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.liu_fang_ti));
        //播放
        g_LGvideoview.start();
        //循环播放
        g_LGvideoview.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
            @Override
            public void onCompletion(MediaPlayer mediaPlayer) {
                g_LGvideoview.start();
            }
        });
    }
    private void playMp4Internet(){
        /*
        播放网上的MP4:
        需要权限
       <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
*/
        MediaController l_m = new MediaController(this);
        l_m.setAnchorView(g_LGvideoview);
        Uri l_uri = Uri.parse("https://qiniu-xpc.xpccdn.com/5b4c8f1691dea.mp4");
        g_LGvideoview.setMediaController(l_m);
        g_LGvideoview.setVideoURI(l_uri);
        g_LGvideoview.start();
    }
    @Override
    protected void onRestart() {
        //返回重新加载
        initVideView();
        super.onRestart();
    }


    @Override
    protected void onStop() {
        //防止锁屏或者弹出的时候,音乐在播放
        g_LGvideoview.stopPlayback();
        super.onStop();
    }

    @Override
    public void onConfigurationChanged(@NonNull Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        switch (newConfig.orientation){
            case Configuration.ORIENTATION_PORTRAIT:
                this.g_tvmsg .setText("当前屏幕为竖屏方向");
                break;
            case Configuration.ORIENTATION_LANDSCAPE:
                this.g_tvmsg .setText("当前屏幕为横屏方向");
                break;
            default:
                break;
        }
    }
}
  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-04-27 22:05
    关注
    • 这篇博客: 【我的Android进阶之旅】如何自定义一个45度旋转的TextView,实现类似右上角文字角标的效果中的 3.4 在Activity中控制旋转角度,以及替换背景 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    • package com.oyp.view;
      
      import android.app.Activity;
      import android.os.Bundle;
      import android.view.View;
      import android.widget.SeekBar;
      import android.widget.TextView;
      
      
      public class MainActivity extends Activity {
          RotateTextView mText;
          TextView degrees;
          boolean isFirst = true;
      
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
      
              mText = (RotateTextView) findViewById(R.id.rotate_textview);
              degrees = (TextView) findViewById(R.id.rotate_degrees);
              SeekBar sbLean = (SeekBar) findViewById(R.id.sb_rotate);
              sbLean.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
                  @Override
                  public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                      mText.setDegrees(progress);
                      degrees.setText("倾斜度:" + progress);
                  }
      
                  @Override
                  public void onStartTrackingTouch(SeekBar seekBar) {
      
                  }
      
                  @Override
                  public void onStopTrackingTouch(SeekBar seekBar) {
      
                  }
              });
              findViewById(R.id.bt_change_bg).setOnClickListener(new View.OnClickListener() {
                  @Override
                  public void onClick(View v) {
                      mText.setBackgroundResource(isFirst ? R.drawable.backgroud2 : R.drawable.backgroud);
                      isFirst = !isFirst;
                  }
              });
      
          }
      
      }
      
      
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 5月12日
  • 已采纳回答 5月4日
  • 创建了问题 4月27日

悬赏问题

  • ¥15 想问一下树莓派接上显示屏后出现如图所示画面,是什么问题导致的
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号